判斷二叉排序樹是否相同

2021-07-15 17:09:44 字數 1307 閱讀 5937

problem description

判斷兩序列是否為同一二叉搜尋樹序列

input

開始乙個數n,(1<=n<=20) 表示有n個需要判斷,n= 0 的時候輸入結束。接下去一行是乙個序列,序列長度小於10,包含(0~9)的數字,沒有重複數字,根據這個序列可以構造出一顆二叉搜尋樹。接下去的n行有n個序列,每個序列格式跟第乙個序列一樣,請判斷這兩個序列是否能組成同一顆二叉搜尋樹。

output

如果序列相同則輸出yes,否則輸出no

sample input

2

567432

543267

576342

0

sample output

yes

no

思路:判斷兩序列是否為同一二叉搜尋樹序列,只需按照所給序列構造相應的二叉排序樹,然後問題只要轉換成兩顆樹是否相同即可,即判斷其前根序列和中根序列(或後根序列和中根序列)是否相同即可,但由於二叉排序樹的特殊性,只需其前根序列相同,兩棵樹就相同。

按照這思路,**如下;

#include#includeusing namespace std;

struct binarysearchnode ;//定義二叉查詢樹

typedef binarysearchnode* binarysearchtree;

//插入

binarysearchtree insert(binarysearchtree tree, int value)

else

} temp = new binarysearchnode();

temp->value = value;

if (tree == null)

else

return tree;

}//前序

int flag = 0;

void pre(binarysearchtree tree, int *p)

}/*//中序

void in(binarysearchtree tree, int *p)

}*/int main()

flag = 0;

pre(tree, min);

while (n--)

flag = 0;

pre(tree, cmp);

for (k = 0; k < l; k++)

}if (k == l)

cout << "yes" << endl;

} }return 0;

}

判斷二叉排序樹

二叉排序樹的判斷,我一開始的想法是根據定義,每次判斷左孩子 根節點 右孩子,但是寫著寫著發現不對,我當時的程式有乙個這樣致命的錯誤 102 12 5 16 類似於這樣的樹也會被判斷為正確。要解決這個問題也不是不行,就是每次在判斷的時候要順帶判斷所有祖先節點,覺得有些麻煩。利用二叉排序樹的性質,資料結...

判斷二叉樹是否相同

判斷二叉樹是否相同 當root1的左子樹與root2的左子樹相同,root1的右子樹與root2的右子樹相同時,這兩顆二叉樹相同。當root1的左子樹與root2的右子樹相同,root1的右子樹與root2的左子樹相同時,這兩顆二叉樹同樣相同。1 bool isequals bnode root1,...

判斷是否相同的二叉搜尋樹

04 樹4 是否同一棵二叉搜尋樹 25 分 給定乙個插入序列就可以唯一確定一棵二叉搜尋樹。然而,一棵給定的二叉搜尋樹卻可以由多種不同的插入序列得到。例如分別按照序列和插入初始為空的二叉搜尋樹,都得到一樣的結果。於是對於輸入的各種插入序列,你需要判斷它們是否能生成一樣的二叉搜尋樹。輸入包含若干組測試資...