給定兩棵樹T1和T2。如果T1可以通過若干次左右孩子互換就變成T2,則我們稱兩棵樹是“同構”的。例如圖1給出的兩棵樹就是同構的,因為我們把其中一棵樹的結點A、B、G的左右孩子互換后,就得到另外一棵樹。而圖2就不是同構的。
圖1
圖2
現給定兩棵樹,請你判斷它們是否是同構的。
輸入給出2棵二叉樹樹的信息。對于每棵樹,首先在一行中給出一個非負整數N(≤),即該樹的結點數(此時假設結點從0到N−1編號);隨后N行,第i行對應編號第i個結點,給出該結點中存儲的1個英文大寫字母、其左孩子結點的編號、右孩子結點的編號。如果孩子結點為空,則在相應位置上給出“-”。給出的數據間用一個空格分隔。注意:題目保證每個結點中存儲的字母是不同的。
如果兩棵樹是同構的,輸出“Yes”,否則輸出“No”。
8A 1 2B 3 4C 5 -D - -E 6 -G 7 -F - -H - -8G - 4B 7 6F - -A 5 1H - -C 0 -D - -E 2 -
Yes
8B 5 7F - -A 0 3C 6 -H - -D - -G 4 -E 1 -8D 6 -B 5 -E - -H - -C 0 2G - 3F - -A 1 4
#include <stdio.h>#define MaxTree 10#define ElementType char#define Tree int#define Null -1//定義二叉樹的結點//采用結構數組存儲二叉樹struct TreeNode{ElementType Element;Tree left;Tree right;}T1[MaxTree],T2[MaxTree];int check[MaxTree];//check數組用來檢查誰是根節點//建樹函數Tree BuildTree(struct TreeNode T[]){int N,i;Tree Root=Null;char cl,cr;scanf("%d\n",&N);if(N){for(i=0;i<N;i++) check[i]=0;//初始check數組全部置0for(i=0;i<N;i++){scanf("%c %c %c\n", &T[i].Element,&cl,&cr);if(cl!='-'){T[i].left=cl-'0';check[T[i].left]=1;//指向的結點check值設置為1}else{T[i].left=Null;//若結點指向為空,則將left設置為-1}// 右結點同理if(cr!='-'){T[i].right=cr-'0';check[T[i].right]=1;}else{T[i].right=Null;}}for(i=0;i<N;i++){//若沒有任何結點指向的那一個結點 就是該樹的根節點if(!check[i]) break;}Root =i;//值賦給根并返回}return Root;}//遞歸比較左右結點是否相等,若兩結點相等int lsomorphic(Tree R1,Tree R2){//比較是否兩棵樹是否同構if((R1==Null)&&(R2==Null))//若同為空結點,返回1return 1;if(((R1==Null)&&(R2!=Null))||((R1!=Null)&&(R2==Null)))//若 一個空,一個不空,肯定不同構,返回0return 0;if(T1[R1].Element!=T2[R2].Element)//若兩結點不空,但是值不相等,肯定不同構,返回0return 0;if((T1[R1].left==Null)&&(T2[R2].left==Null))//若兩棵樹的結點都沒有左子樹,則比較右子樹return lsomorphic(T1[R1].right,T2[R2].right);//若兩棵樹的當前左結點相等,遞歸比較左右子結點if(((T1[R1].left!=Null)&&(T2[R2].left!=Null))&&((T1[T1[R1].left].Element)==(T2[T2[R2].left].Element)))return (lsomorphic(T1[R1].left,T2[R2].left)&&lsomorphic(T1[R1].right,T2[R2].right) );else//若左右子結點互換同構,則互換比較return (lsomorphic(T1[R1].left,T2[R2].right)&&lsomorphic(T1[R1].right,T2[R2].left));No
算法實現及思路
本文由 貴州做網站公司 整理發布,部分圖文來源于互聯網,如有侵權,請聯系我們刪除,謝謝!
網絡推廣與網站優化公司(網絡優化與推廣專家)作為數字營銷領域的核心服務提供方,其價值在于通過技術手段與策略規劃幫助企業提升線上曝光度、用戶轉化率及品牌影響力。這...
在當今數字化時代,公司網站已成為企業展示形象、傳遞信息和開展業務的重要平臺。然而,對于許多公司來說,網站建設的價格是一個關鍵考量因素。本文將圍繞“公司網站建設價...
在當今的數字化時代,企業網站已成為企業展示形象、吸引客戶和開展業務的重要平臺。然而,對于許多中小企業來說,高昂的網站建設費用可能會成為其發展的瓶頸。幸運的是,隨...
無花果是周杰倫的歌嗎?自己的老板周杰倫已經出局了。他將于10月26日發行新專輯。我很期待!《十字架的咒語》的曲目:1.教堂祈禱2、燈影3、杰作4、海棠花5、放手6、現實7、按計劃玩8、靈魂9、無花果10、走廊盡頭11、最后一票(電影《灌籃》主題曲)12.因為籃球(電影《灌籃》集),周杰倫向記者透露,他的新專輯將于10月中下旬發行?!爸x謝你的等待,但我可以向你保證,我不會讓你失望的。雖然在創作上比較...
木門的十大品牌?1 .蒙田木門蒙恬木門成立于1989年,是木門行業的領導品牌。;的木門行業。它生產的各種木材質量優良,深受許多消費者的喜愛。2.塔塔木門塔塔門業成立于1999年,隸屬于北京億泰同創實業有限公司旗下品牌。amp這是一個最早從事研發的企業之一。amp在研發和生產室內門,具有卓越的品質和巨大的市場競爭力。3.展志天華木門展志天華是一家專注木業26年的大型家居建材企業。作為航天部門的合作伙...
w8.1天諾時空卡巴斯基2014怎樣激活?特別說明:Windows 8/Windows 8.1用戶需要進入安全模式才能激活,否則會提示管理員權限。進入安全模式的方法:開始運行(或win R),輸入msconfig單擊確定。單擊“引導”選中“安全引導”單擊“確定”重新啟動計算機。激活方式:拖動卡巴斯基2016激活碼(。Dat文件)進入“天諾時空卡巴斯基2016激活工具”激活成功。激活后,執行以下操作...