資料結構實驗之二叉樹一:樹的同構
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個數按從大到小的順序進行排序,利用 氣泡排序 首先將第一位和第二...