判定兩棵樹是否是同構樹(C語言)

2021-08-14 09:42:19 字數 1536 閱讀 2006

如果樹 t1 通過交換其(某些)節點的左右兒子變換成樹 t2,則稱樹 t1 與樹 t2 同構。

**:

//樹同構的判定

#include

#include

#define yes 1

#define no 0

typedef struct dtree* tree;

typedef char elementtype;

void createtree(tree tmp);

int isomorphic(tree tree1, tree tree2);

/**************************

*定義樹的結構體

*data : 樹儲存的資料

*left : 樹的左兒子

*right : 樹的右兒子

***************************/

struct dtree

;/**************************

*建立乙個二叉樹

*tmp : 樹的基本結構

***************************/

void createtree(tree tmp)

else

tmp->

data

= ch;

createtree(tmp->left);

createtree(tmp->right);

}}/**************************

*判定兩棵樹是否為同構樹

*tree1 : 一棵待判定樹

*tree2 : 另一棵待判定樹

***************************/

int isomorphic(tree tree1, tree tree2)

//如果一棵樹為空,另一棵樹不為空,則不同構

if ((tree1 ==

null

&& tree2 !=

null) || (tree1 !=

null

&& tree2 ==

null))

//如果兩棵樹根節點的資料不同,則不同構

if (tree1->

data

!= tree2->

data)

//如果兩棵樹左節點都為空,則比較右節點

if (tree1->left ==

null

&& tree2->left ==

null)

//如果兩棵樹左節點不為空且資料相同,則比較左左,右右

if ((tree1->left !=

null

&& tree2->left !=

null) && (tree1->

data

== tree2->

data))

//否則比較左右,右左

else

}

判斷兩棵樹是否相等

思路 兩棵樹相等當且僅當roota data rootb data,且a和b的左右子樹相等或左右子樹互換相等 用遞迴的方式進行求解 1 if 兩棵樹都為空 返回true 2 if 兩棵樹中一棵為空,另一棵不為空 返回false 3 if 資料相等 else if 第一棵樹的左子樹與第二棵樹的右子樹相...

樹論 兩棵樹

wc2018 t1 簡化版 by oblack.有兩棵有 n 個節點的樹,分別為 a,b,樹上每條邊都有乙個權值 v i 令 disa x,y 和 disb x,y 分別表示 x 節點與 y 節點在樹 a,b 上的距離 請你找出乙個點對 x,y 使得 disa x,y disb x,y 取得最大值,...

PTA 7 3 樹的同構 C語言判斷兩棵樹是否同構

題目出處 同構的定義 給定兩棵樹t1和t2。如果t1可以通過若干次左右孩子互換就變成t2,則我們稱兩棵樹是 同構 的。例如圖1給出的兩棵樹就是同構的,因為我們把其中一棵樹的結點a b g的左右孩子互換後,就得到另外一棵樹。而圖2就不是同構的。圖一 圖二現給定兩棵樹,請你判斷它們是否是同構的。輸入格式...