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

2021-10-25 18:27:23 字數 2026 閱讀 6301

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

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

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

輸入資料報含多組,每組資料給出

2 棵二叉樹的資訊。對於每棵樹,首先在一行中給出乙個非負整數

n (≤ 10)

,即該樹的結點數(此時假設結點從

0 到

n−1編號);隨後

n 行,第

i 行對應編號第

i 個結點,給出該結點中儲存的

1 個英文大寫字母、其左孩子結點的編號、右孩子結點的編號。如果孩子結點為空,則在相應位置上給出

」-」。給出的資料間用乙個空格分隔。

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

如果兩棵樹是同構的,輸出「

yes」,否則輸出「

no」。

input 

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 -

output 

yes
測試資料對應圖1

#include

using

namespace std;

//樹的節點

struct bitnode

;//定義兩棵樹

bitnode t1[11]

,t2[11]

;/***

*判斷相等的函式

**思想:

- 有兩種結果:

-相等- 不相等。

* - 只看相等, 有兩種情況:

①存再空樹:

兩顆樹都為空才相等

②不存在空樹:

根相等 並且(r1左樹等於r2左,r1右樹等於r右樹 或者 r1左等於r2右 r2右等於r1左)

- 其他情況都是不相等

*/bool

isequal

(int root1,

int root2)

else

if(root1 !=-1

&& root2 !=-1

&&t1[root1]

.data == t2[root2]

.data

&&((

isequal

(t1[root1]

.lchild,t2[root2]

.lchild)

&&isequal

(t1[root1]

.rchild, t2[root2]

.rchild))||

(isequal

(t1[root1]

.lchild,t2[root2]

.rchild)

&&isequal

(t1[root1]

.rchild, t2[root2]

.lchild)))

)return

false;}

/***建立樹的函式

*返回:樹根的位置

*/int

build

(int n, bitnode t)

else

cin>>buff;

if(buff[0]

=='-'

)else

}//找根

for(

int i =

0;i < n;i++

)//空樹

return-1

;}intmain()

else

}}

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

time limit 1000 ms memory limit 65536 kib submit statistic discuss problem description 給定兩棵樹t1和t2。如果t1可以通過若干次左右孩子互換就變成t2,則我們稱兩棵樹是 同構 的。例如圖1給出的兩棵樹就是同構的...

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

time limit 1000ms memory limit 65536k 有疑問?點這裡 給定兩棵樹t1和t2。如果t1可以通過若干次左右孩子互換就變成t2,則我們稱兩棵樹是 同構 的。例如圖1給出的兩棵樹就是同構的,因為我們把其中一棵樹的結點a b g的左右孩子互換後,就得到另外一棵樹。而圖2就...

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

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