#include
#include
#define maxtree 10
#define elementtype char
#define tree int
#define null -1
struct treenode
t1[maxtree],t2[maxtree];
tree buildtree ( struct treenode t);
int isomorphic(tree r1,tree r2);
int main()
else
return 0;}
tree buildtree ( struct treenode t)
for( i=0
; i scanf("\n%c %c %c",&t[i].e,&cl,&cr);
if( cl!='-' )
else if( cl=='-' )
if( cr!='-' )
else if( cr=='-' )
}for( i=0
; i if( !check[i])
}root = i;
}return root;
}int isomorphic(tree r1,tree r2)
主要流程不談,具體可看mooc小白專場
看到判斷是否同構的函式,都開始有點懷疑自己學的c語言,
然後又去找了找判斷二叉樹是否相同的函式,**如下
//二叉樹節點結構體
struct binarynode
*btree;
//判斷二叉樹是否相等的函式
bool isequal(btree t1,btree t2)
演算法思想:先序遍歷,遞迴實現。先判斷根節點是否相等,然後在判斷左右子樹是否相等。
兩者的區別在於
前者是同構,有交換左右子樹也判斷正確的情況,導致多了最後三個的分類討論。
樹 樹的同構
給定兩棵樹t1和t2。如果t1可以通過若干次左右孩子互換就變成t2,則我們稱兩棵樹是 同構 的。例如圖1給出的兩棵樹就是同構的,因為我們把其中一棵樹的結點a b g的左右孩子互換後,就得到另外一棵樹。而圖2就不是同構的。圖1 圖2輸入給出2棵二叉樹樹的資訊。對於每棵樹,首先在一行中給出乙個非負整數n...
2 3樹的個人理解
由於二叉查詢樹在理想狀態下的高效的效能以及無法保證效能下限的缺點,如何去優化它就十分有意義。優化的思路很自然的想到 只要在插入過程中盡量使樹保持平衡,就能保證它的效能下限。如何實現這一點,幸運的我們已經由前人想到了非常聰明的解決辦法 2 3 查詢樹。一顆2 3 查詢樹或為空樹,或為以下節點組成 一顆...
PTA 5 3 樹的同構 理解遞迴
難點 遞迴函式的實現 int isomorphic tree r1,tree r2 1.由於首先在一行中給出乙個非負整數n,考慮到n 0時root 1 即表示根節點找不到,注意root!0的原因是題目預設從0開始作為下標 2.該函式傳入的引數可能為null的原因 其一,當n 0時,根節點為null ...