數據結構必須要懂的類型之二叉排序樹

1、什麼是二叉排序樹

在這裏插入圖片描述
二叉排序樹 又叫(排序樹 搜索數)他是一個一棵空樹,或者是一棵具有如下性質的樹:
1)若左子樹不爲空,那麼左子樹上面的所有節點的關鍵字值都比根節點的關鍵字值小
2)若右子樹不爲空,那麼右子樹上面的所有節點的關鍵字值都比根節點的關鍵字值大
3)左右子樹都爲二叉樹
4)沒有重複值(這一點在實際中可以忽略)

2、如何遍歷

二叉樹中序遍歷,先訪問左節點,然後訪問中間節點,然後在訪問右節點
如上圖 中序遍歷一個樹,
1、先訪問根節點的左子樹 12 ,它有左子樹? 有 --> 結果:
2、訪問 12 的左子樹 9 ,它有左子樹? 沒有 --> 結果:9
3、它有右子樹? 沒有,訪問上一級 --> 結果:9 12
4、12 是否有右子樹 ? 有 , 訪問 40 --》 結果: 9 12
5、 40是否有左子樹? 有, 訪問 35 ,且35 沒有左子樹 --> 結果: 9 12 35
6、 檢查35 是否有右子樹? 沒有 , 訪問它的根節點 --》 結果: 9 12 35 40
7、檢查 40 是否有右子樹? 有,訪問 190 ,它有左子樹
8、訪問它的左子樹 146, 檢查它有左子樹? 沒有 —》 結果: 9 12 35 40 146
9、檢查它有右子樹? 無 , 訪問它的父節點 190 --》 結果 : 9 12 35 40 146 190
10、 檢查190 它是否有右子樹? 無, 根節點的左子樹全部遍歷完成 ,訪問根節點 --》結果: 9 12 35 40 146 190 381

。。。。

依次類推

最終的結果是:9 12 35 40 146 190 381 394 410 445 476 540 600 760 800
可以看出 中序遍歷得到的就是一個經過排序以後的 數組

3、查詢 刪除

在這裏插入圖片描述
刪除節點需要考慮的有四種情況:

  1. 節點是葉子 如 1 4 7節點
    刪除方式 就是斬斷父子節點的引用鏈接
    只需要將父節點的左子樹或者右子樹置爲null 然後將目標節點的父節點的也置爲null

  2. 節點只有左孩子 如 2 節點
    刪除方式就是把 找到1號節點的左右子節點的最小樹 放在 2位置

  3. 節點只有右孩子 如 6 節點
    同 2一樣 找到 找到 7 號節點的最小值節點, 然後替換到 6號節點位置

  4. 節點既有左孩子 又有右孩子 如 3 和 5
    需要找到右子節點樹上的最小位置, 然後把目標節點的左子樹 放在這個最小值節點的左邊, 然後切斷最小節點與父節點的鏈接,然後把目標節點的右子樹 接到這個最小值節點的做右子樹上最大值節點上。
    在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章