題目:
給定兩棵樹t1和t2。如果t1可以通過若干次左右孩子互換就變成t2,則我們稱兩棵樹是「同構」的。現給定兩棵樹,請你判斷它們是否是同構的。
輸入給出2棵二叉樹樹的資訊。對於每棵樹,首先在一行中給出乙個非負整數n (≤10),即該樹的結點數(此時假設結點從0到n−1編號);隨後n行,第i行對應編號第i個結點,給出該結點中儲存的1個英文大寫字母、其左孩子結點的編號、右孩子結點的編號。如果孩子結點為空,則在相應位置上給出「-」。給出的資料間用乙個空格分隔。注意:題目保證每個結點中儲存的字母是不同的。
如果兩棵樹是同構的,輸出「yes」,否則輸出「no」。
8
a 1 2
b 3 4
c 5 -
d - -
e 6 -
g 7 -
f - -
h - -
8g - 4
b 7 6
f - -
a 5 1
h - -
c 0 -
d - -
e 2 -
yes
8
b 5 7
f - -
a 0 3
c 6 -
h - -
d - -
g 4 -
e 1 -
8d 6 -
b 5 -
e - -
h - -
c 0 2
g - 3
f - -
a 1 4
no
//靜態鍊錶實現,物理上是陣列,思想上是鍊錶
#include#define maxtree 10
#define elementtype char
#define tree int
#define null -1
//結構體陣列,陣列的下標即是位址,element儲存樹的值, left儲存左兒子位址,right儲存右兒子位址
struct treenodet1[maxtree],t2[maxtree];
//建樹函式
int buildtree(struct treenode t);
//判斷是否同構函式
int isomorphic(tree,tree);
int main()
int buildtree(struct treenode t) else t[i].left=null;
if(cr!='-') else t[i].right=null;
} for(i=0;iroot = i;
} return root;
}int isomorphic(tree r1,tree r2)
//是不是有一棵樹是空的,另一棵不空
if((r1==null && r2!=null)||(r1!=null && r2==null))
//樹根的值是不是 不相等
if(t1[r1].element !=t2[r2].element)
//兩棵樹是不是 都沒有左子樹
if(t1[r1].left==null && t2[r2].left==null)
//兩棵樹是不是 都有左子樹 並且 兩左子樹的值相等
if((t1[r1].left!=null && t2[r2].left!=null) && (t1[t1[r1].left].element==t2[t2[r2].left].element))
//兩棵樹 有一棵沒有左子樹 或者 兩左子樹的值不相等
else
}
資料結構與演算法 1樹的同構
description 給定兩棵樹t1和t2。如果t1可以通過若干次左右孩子互換就變成t2,則我們稱兩棵樹是 同構 的。例如圖1給出的兩棵樹就是同構的,因為我們把其中一棵樹的結點a b g的左右孩子互換後,就得到另外一棵樹。而圖2就不是同構的。現給定兩棵樹,請你判斷它們是否是同構的。input 輸入...
PTA 資料結構與演算法 7 3 樹的同構
如有不對 不吝賜教 給定兩棵樹t1和t2。如果t1可以通過若干次左右孩子互換就變成t2,則我們稱兩棵樹是 同構 的。例如圖1給出的兩棵樹就是同構的,因為我們把其中一棵樹的結點a b g的左右孩子互換後,就得到另外一棵樹。而圖2就不是同構的。現給定兩棵樹,請你判斷它們是否是同構的。輸入格式 輸入給出2...
資料結構 03 樹1 樹的同構(25 分)
題目描述 給定兩棵樹t1和t2。如果t1可以通過若干次左右孩子互換就變成t2,則我們稱兩棵樹是 同構 的。例如圖1給出的兩棵樹就是同構的,因為我們把其中一棵樹的結點a b g的左右孩子互換後,就得到另外一棵樹。而圖2就不是同構的。圖1 圖2 現給定兩棵樹,請你判斷它們是否是同構的。輸入給出2棵二叉樹...