如果樹 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就不是同構的。圖一 圖二現給定兩棵樹,請你判斷它們是否是同構的。輸入格式...