二叉搜尋樹 (判斷是否為同一顆搜尋樹)

2021-08-25 19:21:28 字數 899 閱讀 3051

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

開始乙個數n,(1<=n<=20) 表示有n個需要判斷,n= 0 的時候輸入結束。 

接下去一行是乙個序列,序列長度小於10,包含(0~9)的數字,沒有重複數字,根據這個序列可以構造出一顆二叉搜尋樹。 

接下去的n行有n個序列,每個序列格式跟第乙個序列一樣,請判斷這兩個序列是否能組成同一顆二叉搜尋樹。

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

2

567432

543267

576342

0

yes

no

題意:先給一組資料構建一顆二叉搜尋樹作為標準樹。緊跟著n組資料中,判斷每組資料構成的二叉搜尋樹是否和標準樹yi一樣。

思路:兩棵樹如果一樣的話,就是擁有一樣的節點,在每個節點上具有相同的值,且在相同遍歷條件下,遍歷的順序是一樣的。因此我們可以在遍歷二叉樹的時候,每向下移動乙個節點時,判斷是否與此時的標準樹一致。

**如下:

#include#includestruct node

;bool flag;

node *insert(node *p,int x) //依次插入每個值

else //不為空,代表此節點有值

}void check(node *root,node *rom) //傳入標準樹和判斷樹的位址

else if(root!=null||rom!=null) //如果兩顆樹中,只有一棵樹在這個節點有值,那麼這兩棵樹肯定不一致

flag=false;

}int main()

}}

判斷是否是同一顆二叉搜尋樹

給定乙個插入序列就可以唯一確定乙個平衡二叉樹,但是,乙個給定的平衡二叉樹卻可以由不同的插入序列得到。比如按照序列 與序列 插入初始為空的二叉搜尋樹中,將得到相同的二叉平衡樹。強調內容 有一下三種方式 1.建立搜尋樹 根據兩個序列分別建立兩個搜尋樹,在去比較兩個樹是否一樣。2.不建立搜尋樹 首先比較序...

驗證一顆二叉搜尋樹

給定乙個二叉樹,判斷其是否是乙個有效的二叉搜尋樹。假設乙個二叉搜尋樹具有如下特徵 節點的左子樹只包含小於當前節點的數。節點的右子樹只包含大於當前節點的數。所有左子樹和右子樹自身必須也是二叉搜尋樹。這裡有一種錯誤的思路 判斷當前節點大於左節點,小於右節點,以此遞迴下去,當不滿足上面條件就返回false...

判斷一顆二叉樹是否為搜尋二叉樹和完全二叉樹

搜尋二叉樹 二叉樹的中序遍歷,在遍歷的過程中,節點值都是遞增的 class node object def init self,value self.value value self.right none self.left none def isbst head if head none retu...