算法杂谈:二叉树
二叉樹 BST
- 定義:假設當前節點為A,則A的左側子節點一定比A小,右側子節點一定比A大
- 二叉樹的高度決定了它的查找效率,時間復雜度是O(LogN),最壞的情況是O(N)
查找節點
- 如果相等就直接返回當前節點
- 如果比當前節點小,就繼續查找當前節點的左側子節點
- 如果比當前節點大,就繼續查找當前節點的右側子節點
- 直到當前節點為空,或者找到節點,查找才結束
添加節點
- 假設當前要添加的節點=20
- 根據查找節點的規則,找到最后一個節點
- 然后判斷大小,把節點添加到左側或者右側
如下圖,如果需要添加節點=20,則位置在綠色的地方(15),因為20>15,所以作為右節點添加 
如果需要添加節點=60,因為找不到符合規則的位置,最后查找的地方會是70,所以作為70的左節點(葉子節點) 
刪除節點
- 根據查找節點的規則,先找到目標節點
- 如果目標節點是葉子節點,則直接刪除
- 如果不是葉子節點,則找到用左子樹中最右端的葉子結點 或者 右子樹中最左端的葉子節點
- 將找到的節點替換掉需要刪除的幾點
- 最后刪除找到的節點
這個看著有點繞,我們來看個例子,假設下圖需要刪除根節點(50),我們找到左側最右端的葉子節點,就是40
然后將40替換掉需要刪除的50,再刪除40,就大功告成了??梢钥吹贸鰜?#xff0c;新組成的樹仍然會符合二叉樹的定義特征。
總結
- 上一篇: Java进阶:ArrayList线程安全
- 下一篇: Java进阶:Set、Map线程安全问题