給定兩棵樹t1和t2。如果t1可以通過若干次左右孩子互換就變成t2,則我們稱兩棵樹是「同構」的。例如圖1給出的兩棵樹就是同構的,因為我們把其中一棵樹的結點a、b、g的左右孩子互換後,就得到另外一棵樹。而圖2就不是同構的。
圖1
圖2現給定兩棵樹,請你判斷它們是否是同構的。
輸入給出2棵二叉樹樹的資訊。對於每棵樹,首先在一行中給出乙個非負整數n (≤),即該樹的結點數(此時假設結點從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
題目分析:首先可以通過樹最大大小 為10來建樹---利用結構體陣列儲存樹 對於判斷2個樹是否同構 可以遞迴的進行判斷 對根節點判斷完成後 分成兩種情況繼續判斷----一種是 兩顆樹的左右節點正好匹配 一種是兩棵樹的左右節點匹配相反 這樣判斷下去 直到遇到不存在的結點為止
1view code#define _crt_secure_no_warnings
2 #include3 #include4 #include
5 typedef int
lchild;
6 typedef int
rchild;
78 typedef struct
tnode
9tree[10
];14
15tree a;
16tree b;
1718
int collected[10
];19
void
initiliazecollected()
2024
intbuildtree(tree a)
2541
else
42 a[i].lc = -1;43
if (n2 != '-'
)4448else
49 a[i].rc = -1;50
}51for (int i = 0; i < n; i++)
52if (!collected[i])
53return
i;54}55
int charge(int treea, int
treeb)
5665
else
66return0;
67}68int
main()
69
PTA 資料結構與演算法題目集(中文)6 2
6 2 順序表操作集 20 分 本題要求實現順序表的操作集。list makeempty position find list l,elementtype x bool insert list l,elementtype x,position p bool delete list l,positio...
PTA 資料結構與演算法題目集(中文)6 5
6 5 鏈式表操作集 20 分 本題要求實現鏈式表的操作集。position find list l,elementtype x list insert list l,elementtype x,position p list delete list l,position p 其中list結構定義如...
PTA資料結構與演算法題目集(中文)7 18
題意 有兩個視窗a,b,題目給出a視窗處理完兩個顧客,b視窗處理完乙個顧客,並且當不同視窗同時處理完2個顧客時,a視窗顧客優先輸出。我們可以給出兩個佇列q1,q2分別表示a,b視窗,編號為奇數的顧客存放到q1中,為偶數的顧客存放到q2中。include include include include...