題意:
這個題首先給出乙個01序列,這個序列的意思是,從乙個樹的根開始遍歷,遇到0走到乙個孩子,遇到1則當前節點返回到它的父親節點,最後回到樹的根。求對這樣兩個01序列進行遍歷後形成的兩顆樹是否同構。
分析:1.這個序列中的0和1個數必須相同,否則無法回到根。有幾個0就有幾個節點。
2.遍歷01序列建樹,記錄每個節點的深度和孩子個數,然後排序進行比較。
3.一開始,我記錄每個節點的孩子個數僅限於孩子(沒有記錄孫子,曾孫等),結果wa了。應該記錄每個節點的所有後代的個數。
4.這道題我用的是靜態鍊錶。
**:view code
1 #include 2 #include 3 #include 4 #includetjuoj 15035 #include 6
using
namespace
std;
7const
int maxnum=1505;8
9struct
node
10list[maxnum],llist[maxnum];
15int
use,use;
1617
void
init()
1825 list[0].depth=0
;26 list[0].child_num=1;27
28for(i=0;i)
2933 llist[0].depth=0
;34 llist[0].child_num=1;35
}3637bool compare(struct node a,struct
node b)
3844
45void
fuction()
4664
else
6570
}71 sort(list,list+use,compare);
72//
for(i=0;i73
//cout<74
//cout<75}76
77void
fuction()
7896
else
97102
}103 sort(llist,llist+use,compare);
104//
for(i=0;i105
//cout<106
}107
108bool
same()
109120
return
true
;121
}122
123int
main()
124137
return0;
138}
139/*
1403
1410010011101001011
1420100011011001011
1430010011101001011
1440100011011001011
1450100101100100111
1460011000111010101
147*/
樹的同構 poj 1635
判斷兩個有根樹是否同構。判斷兩個有根樹是否同構,本質上是hash應用,每個點的權值是這個子樹的權值和。樹上某一組合不同都會導致最終結構的不同。include include include include include include include using namespace std con...
poj 1635 樹的同構
思路 因為題目要求的是o n2 的演算法,而且是樹不是圖,所以思路比較隨意,先找每個節點的爸爸,然後記錄每個節點有多少個子孫 包括兒子的兒子 然後只有排序之後每個都一樣,那樹就同構,如果題目要求o n 的話,就不能找爸爸,直接找兒子,然後深搜。你還是看 吧,我感覺我說的不清楚 include inc...
樹 樹的同構
給定兩棵樹t1和t2。如果t1可以通過若干次左右孩子互換就變成t2,則我們稱兩棵樹是 同構 的。例如圖1給出的兩棵樹就是同構的,因為我們把其中一棵樹的結點a b g的左右孩子互換後,就得到另外一棵樹。而圖2就不是同構的。圖1 圖2輸入給出2棵二叉樹樹的資訊。對於每棵樹,首先在一行中給出乙個非負整數n...