問題:算法
可否進一步提升,好比整體O(n+h)、單版本O(1)? 答案是能夠!!spa
相鄰的版本之間的差別不能超過O(1),顯然AVL樹的刪除操做不能知足這一點,由於當每次刪除一個節點後,有可能自底而上,逐層引起多大logN次的旋轉。3d
因此要用到紅黑樹:blog
紅黑樹所具備的規則:接口
對紅色節點作一次提高變換:原理
底層節點:im
在通過提高以後:d3
原來提高以後的紅黑樹就是4階B樹啊!!!總結
紅黑樹接口定義: margin
紅黑樹的動態調整算法:
插入:
雙紅修正算法:
第一種狀況:叔父節點u是黑色的
第二種狀況:叔父節點u是紅色的
須要在出現問題的節點中,找到居中的那個關鍵碼,而且以他爲界,將原先的大節點分爲左右兩個新的節點。居中分界的關鍵碼,將被取出上移插入父節點的位置中。
插入操做討論:
紅黑樹的刪除算法:
當待刪除節點x與替代者r均爲黑色時(雙黑):必然違背第四條規則:
BB-1:兄弟爲黑色,且兄弟s至少有一個紅孩子爲t.
四顆子樹的黑高度都是同樣的,若是調整之後,紅黑樹性質在全局得以恢復——刪除完成。這一轉換在其背後有着深入的原理。仍是將紅黑樹轉換到B樹查看
BB2R狀況:父親p爲紅色,兄弟s及兄弟的兩個孩子均爲黑色。 而當s的兩個孩子都爲黑時,提高之後,兄弟節點本身也沒有足夠的孩子了。
BB2B狀況:父親p爲黑色,兄弟s爲黑色,兄弟s的兩個孩子也爲黑色。
BB-3:兄弟s爲紅色,其孩子均爲黑色
總結概括