遞迴法進行二叉樹同構判定

2021-10-09 05:44:21 字數 970 閱讀 6175

#include#define maxtree 100

#define elementtype char

#define tree int

//定義乙個樹的結構體,這裡採用乙個靜態鍊錶儲存

struct treenodet1[maxtree],t2[maxtree];

//建立樹的函式

int buildtree(struct treenode t)

//定義乙個測試陣列來判斷結點是否有雙親,初始值賦值為0

int test[n];

for(int i=0;ifor(int i=0;ielse

t[i].lefttree=-1; //左孩子為空則標記為-1

if(ch2!='-')

else

t[i].righttree=-1;

} for(int j=0;j}//判斷樹是否同構並輸出

int issame(int root1,int root2)

//非空但結點資料不相等則不同構

if(t1[root1].data!=t2[root2].data)

return 0;

//繼續遞迴比較左子樹和左子樹 ,右子樹和右子樹

if(issame(t1[root1].lefttree,t2[root2].lefttree)&&issame(t1[root1].righttree,t2[root2].righttree))

//遞迴比較a的左與b的右子樹

if(issame(t1[root1].righttree,t2[root2].lefttree)&&issame(t1[root1].lefttree,t2[root2].righttree))

return 0;//都不同構返回0;

} //主函式

int main()else

return 0;

}

遞迴法(非遞迴法)遍歷二叉樹

2.4 用 遞迴法 非遞迴法 實現先序遍歷 中序遍歷和後序遍歷函式,要求遍歷時能執行一定的操作,且該操作可由遍歷函式的呼叫者來設定。define tree type int typedef struct tree nodetreenode 先序遍歷與建立二叉樹 遞迴法 include tree.h ...

二叉樹的遍歷(遞迴法和非遞迴法)

所謂的二叉樹是指樹中所有節點的子節點個數都不超過2的樹。對於二叉樹,有深度遍歷和廣度遍歷,深度遍歷有前序 中序以及後序三種遍歷方法,廣度遍歷即我們平常所說的層次遍歷。前序遍歷首先訪問根結點然後遍歷左子樹,最後遍歷右子樹。在遍歷左 右子樹時,仍然先訪問根結點,然後遍歷左子樹,最後遍歷右子樹。若二叉樹為...

二叉樹的同構

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