problem description
判斷兩序列是否為同一二叉搜尋樹序列
input
開始乙個數n,(1<=n<=20) 表示有n個需要判斷,n= 0 的時候輸入結束。接下去一行是乙個序列,序列長度小於10,包含(0~9)的數字,沒有重複數字,根據這個序列可以構造出一顆二叉搜尋樹。接下去的n行有n個序列,每個序列格式跟第乙個序列一樣,請判斷這兩個序列是否能組成同一顆二叉搜尋樹。
output
如果序列相同則輸出yes,否則輸出no
sample input
2567432
543267
576342
0
sample output
yesno
思路:判斷兩序列是否為同一二叉搜尋樹序列,只需按照所給序列構造相應的二叉排序樹,然後問題只要轉換成兩顆樹是否相同即可,即判斷其前根序列和中根序列(或後根序列和中根序列)是否相同即可,但由於二叉排序樹的特殊性,只需其前根序列相同,兩棵樹就相同。
按照這思路,**如下;
#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 分 給定乙個插入序列就可以唯一確定一棵二叉搜尋樹。然而,一棵給定的二叉搜尋樹卻可以由多種不同的插入序列得到。例如分別按照序列和插入初始為空的二叉搜尋樹,都得到一樣的結果。於是對於輸入的各種插入序列,你需要判斷它們是否能生成一樣的二叉搜尋樹。輸入包含若干組測試資...