希望看此文前了解什麼是2-3樹,就不介紹什麼是2-3樹了
查詢遍歷也不說了
直接上難啃的骨頭
2-3樹中節點插入規則:
規則1:優先搜尋並沉底
規則2:沉底產生4節點則分解
規則一很容易理解,即向2節點插入新節點key=k'產生3節點,若以前2節點的key是k,產生左子樹
如果不小心最後面節點是3節點,插入後產生4節點,這時就根據規則2進行分解4節點,方便起見不繪製最後一層null
對於6中情況的圖,希望理解,但是如果記憶不住,後面還有更簡單的記憶法
分為6種情況:(此間key大小順序即abcdefg的大小順序)
1、就乙個節點4節點,即從空樹開始****到第三個數插進去,根據規則1,這時就是乙個4節點,根據規則2,需要分解4節點:這裡分解為一棵3個2-節點的數,如圖:
2、父親是2節點時,兩種情況,一種左,一種右互相對稱,只寫一種圖。
3、父親是3-節點,這時其實是上移4-節點,直到情況2或者情況1
有三種情況如下(注意大小一定滿足排序樹):
對應變成:
如果不能記憶,可以繼續看下面的簡單記憶方法
簡單記憶法:
只需要把4-節點按照1變成3個2-節點,如下:
那麼對於3中的左情況而言:
其他任何情況適用。
紅黑樹的條件是怎麼來的 從2 3樹到紅黑樹
前幾天學習epoll函式,發現epoll函式使用紅黑樹結構儲存epfd來提高fd檢索速度,又想起hashmap中引入了紅黑樹在達到一定鍊錶長度後轉為紅黑樹來避免鍊錶遍歷。紅黑樹的應用這麼廣泛,我們應該對其有所了解。首先我們應該知道,在無序線性表中查詢是否存在某個值需要對線性表進行遍歷,其查詢時間複雜...
紅黑樹筆記 紅黑樹的插入操作
紅黑樹的插入操作可以在o logn 的時間內完成。開始插入節點的時候和二叉查詢樹一樣,只需要最後將插入的節點著成紅色,為了保證紅黑樹的性質,需要通過rb insertfixup函式來調整該節點,對其重新著色並旋轉。下面先呼叫rb insert 函式將乙個節點插入到紅黑樹中,同樣先上偽 rb inse...
紅黑樹下 紅黑樹的實現
1.實現紅黑樹的基本思想 實際上,紅黑樹是有固定的平衡過程的 遇到什麼樣的節點分布,我們就對應怎麼去調整。只要按照這些固定的調整規則來操作,就能將乙個非平衡的紅黑樹調整成平衡的。首先,我們需要再來看一下紅黑樹的定義 在插入 刪除節點的過程中,第 三 四點要求可能會被破壞,所以 平衡調整 實際上就是把...