PTA資料結構與演算法題目集 中文 7 3

2022-04-11 07:21:43 字數 2010 閱讀 6645

給定兩棵樹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個樹是否同構 可以遞迴的進行判斷 對根節點判斷完成後 分成兩種情況繼續判斷----一種是 兩顆樹的左右節點正好匹配 一種是兩棵樹的左右節點匹配相反 這樣判斷下去 直到遇到不存在的結點為止

1

#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

view code

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...