機試書 判斷兩棵樹是否為同一棵樹

2021-09-24 03:24:42 字數 889 閱讀 5175

由於一種遍歷順序不能唯一地確定一棵樹,所以兩顆不同的樹的某一種遍歷順序是可能相同的,比如數字相同但插入順序不同的兩棵二叉排序樹,中序遍歷的結果是相同的。

結論:對兩棵樹進行包括中序遍歷在內的兩種遍歷(如中序+前序遍歷),若兩種遍歷的結果都相同,則可以判定兩棵樹相同。

進行前序遍歷+中序遍歷,將遍歷結果存到char陣列中,最後用strcmp來比較。(為了使用strcmp,在比較前要在char陣列末尾加乙個char[tail]='\0',表示字串到達末尾)

#include#includeusing namespace std;

struct treenode };

void inserttree(treenode* &t, int a) //注意這裡傳引用&t,防止修改無效

else if(t->val>a) //a應該在左子樹

else if(t->valright,a); }}

char str1[50],str2[50];//將前序遍歷+中序遍歷的結果序列相連線儲存到乙個字元陣列中,方便strcmp

int cnt1=0,cnt2=0;

//中序遍歷

void inorder(treenode*head,int number) //number:之後輸入的要來比較的,number=2

//前序遍歷

void preorder(treenode*head,int number) //number:之後輸入的要來比較的,number=2

int main()

判斷兩棵樹是否相等

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

一棵樹是否為另一棵樹的子結構

輸入兩顆二叉樹a,b,判斷b是不是a的子結構。問題描述 給定兩個二叉樹的根節點,判斷第二樹是否是第乙個樹的子樹,如果是返回1,否則返回0.拿第二個樹的每個節點去和第乙個樹做匹配,如果某個節點匹配成功,就接著往下匹配,否則重新從第二個樹的的根節點開始。注意區別 測試用例 樹1 42 6 1 3 5 7...

判斷是否為同一棵搜尋樹

include include using namespace std 讀入 n 和l n代表又多少個元素 l代表要比較多少個序列 typedef struct student btree,tree void init btree btree l 對樹的初始化 btree insert node b...