二叉排序樹(binary sort tree)或者是一顆空樹;或者是具有下列性質的二叉樹:
(1)若左子樹不為空,則左子樹上所有結點的值均小於它的根節點的值
(2)若右子樹不為空,則右子樹上所有結點的值均大於它的根節點的值
(3)左右子樹自己也是二叉排序樹
一般的問題中,關於二叉排序樹的建立類似如下題目:
依序列(40,72,38,35,67,51,90,8,55,21),建立二叉排序樹。可以很容易的得到一棵二叉排序樹如下:
但在某些問題中,例如將序列替換為
(54,25,36,47,36,88,11,86,60)其**現了36,47,36這一片段,出現了兩個相同的值該如何處理呢?
在查詢資料後得到:
「二叉樹是一種動態查詢表。特點是,樹的結構不是一次生成的,而是在查詢過程中,當樹中不存在關鍵字等於給定值的結點時再進行插入。新插入的結點一定是乙個新新增的葉子結點,並且是查詢不成功時查詢路徑上訪問的最後乙個結點的左孩子或右孩子結點。」
所以根據上面所得,第二個36在樹中存在,所以在建立時不需要再次插入。
所以需要去掉乙個值為36的結點,得到的二叉排序樹如下(藍色為建立順序)
判斷二叉排序樹是否相同
problem description 判斷兩序列是否為同一二叉搜尋樹序列 input 開始乙個數n,1 n 20 表示有n個需要判斷,n 0 的時候輸入結束。接下去一行是乙個序列,序列長度小於10,包含 0 9 的數字,沒有重複數字,根據這個序列可以構造出一顆二叉搜尋樹。接下去的n行有n個序列,每...
二叉排序樹 插入 刪除 查詢
原本是想寫關於android分享功能的部落格,但是沒真機不好去測試,大白天的手機被3歲娃娃,拿去看少兒頻道了,關於二叉排序樹的定義是 二叉排序樹或者是一棵空樹,或者是具有下列性質的二叉樹 1 若左子樹不空,則左子樹上所有結點的值均小於它的根結點的值 2 若右子樹不空,則右子樹上所有結點的值均大於它的...
二叉排序樹
在複習資料結構,把這個東西總結一下。這種結構是動態查詢表,這種動態是相對靜態查詢 順序查詢,折半查詢,分塊查詢等 來說的。對於各種靜態鍊錶,要達到查詢複雜度為o logn 必須要求有序 而要使插入刪除複雜度為o 1 必須是鍊錶儲存。動態查詢表就可以同時滿足這兩者。動態查詢表的特點是表結構本身在查詢過...