NO 2 樹的同構

2021-08-04 06:35:52 字數 1459 閱讀 8323

資料結構實驗之二叉樹一:樹的同構

time limit: 1000ms memory limit: 65536kb

problem description

給定兩棵樹t1和t2。如果t1可以通過若干次左右孩子互換就變成t2,則我們稱兩棵樹是「同構」的。例如圖1給出的兩棵樹就是同構的,因為我們把其中一棵樹的結點a、b、g的左右孩子互換後,就得到另外一棵樹。而圖2就不是同構的。

圖1圖2

現給定兩棵樹,請你判斷它們是否是同構的。

input

輸入資料報含多組,每組資料給出2棵二叉樹的資訊。對於每棵樹,首先在一行中給出乙個非負整數n (≤10),即該樹的結點數(此時假設結點從0到n−1編號);隨後n行,第i行對應編號第i個結點,給出該結點中儲存的1個英文大寫字母、其左孩子結點的編號、右孩子結點的編號。如果孩子結點為空,則在相應位置上給出」-」。給出的資料間用乙個空格分隔。

注意:題目保證每個結點中儲存的字母是不同的。

output

如果兩棵樹是同構的,輸出「yes」,否則輸出「no」。

example input

8 a 1 2

b 3 4

c 5 -

d - -

e 6 -

g 7 -

f - -

h - -

8 g - 4

b 7 6

f - -

a 5 1

h - -

c 0 -

d - -

e 2 -

example output

yeshint

測試資料對應圖1

author

xam推薦部落格

#include

using

namespace

std;

struct node

;struct node t1[12], t2[12];//兩個結構體

int buildtree ( struct node t, int n)

else t[i].left = -1;//空

if(cr!='-')//同理

else t[i].right =-1;}}

else

return -1;

for(i=0;iif(check[i]==0)

break;

}root = i;//根節點

return root;

}int isomorphic(int root1, int root2)//比較

int main()

小結:

看了好多部落格,才明白過來……

之前,我一直是按照自己的習慣來寫**,感覺typedef很麻煩的樣子。

現在,我要嘗試著寫規範一點的**,不然,別人的**,我自己讀不懂;自己的**,其他人更加讀不明白。

樹 樹的同構

給定兩棵樹t1和t2。如果t1可以通過若干次左右孩子互換就變成t2,則我們稱兩棵樹是 同構 的。例如圖1給出的兩棵樹就是同構的,因為我們把其中一棵樹的結點a b g的左右孩子互換後,就得到另外一棵樹。而圖2就不是同構的。圖1 圖2輸入給出2棵二叉樹樹的資訊。對於每棵樹,首先在一行中給出乙個非負整數n...

約瑟夫問題No 2

思路 設定乙個陣列,將其全部設定為1.由於陣列下標是從0開始,所以方便期間,遍歷時從 p 1 開始。將temp作為計數的乙個工具,每當遍歷次數達到要求m時,將下標為 i n 的陣列置為0,以至於下一次遍歷時跳過該陣列同時將計數工具置為0,重新計數。count作為出隊的次數,由於count初始化為0,...

No 2 氣泡排序

學習演算法打卡第二天 今天記錄一下學的 氣泡排序 在寫上一節 桶排序 的時候,就在想我要是要將小數排序怎麼辦,或者要是排序的數的範圍在很大很大又怎麼辦?利用 桶排序 很浪費空間,浪費可恥!但是 氣泡排序 可以解決這些問題。比如我們要將5個數按從大到小的順序進行排序,利用 氣泡排序 首先將第一位和第二...