poj1635 樹的同構

2022-07-24 01:42:15 字數 1583 閱讀 9812

題意:

這個題首先給出乙個01序列,這個序列的意思是,從乙個樹的根開始遍歷,遇到0走到乙個孩子,遇到1則當前節點返回到它的父親節點,最後回到樹的根。求對這樣兩個01序列進行遍歷後形成的兩顆樹是否同構。

分析:1.這個序列中的0和1個數必須相同,否則無法回到根。有幾個0就有幾個節點。

2.遍歷01序列建樹,記錄每個節點的深度和孩子個數,然後排序進行比較。

3.一開始,我記錄每個節點的孩子個數僅限於孩子(沒有記錄孫子,曾孫等),結果wa了。應該記錄每個節點的所有後代的個數。

4.這道題我用的是靜態鍊錶。

**:view code

1 #include 2 #include 3 #include 4 #include 

5 #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*/

tjuoj 1503

樹的同構 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...