紅-黑樹知識點
1、有序數組,對於有序數組(例如哈希表),其查找的效率很高,但是插入效率低。適用於靜態數據。
2、鏈表,對於鏈表的數據結構,其插入和刪除的效率很高,但是查找的效率低。
3、樹,對於樹的結構,綜合了有序數組的查找效率和鏈表的插入和刪除效率,適用於靜態數據。
一、二叉搜索樹(BST樹)
有序的樹結構,樹的左子樹總是比根節點小,右子樹總是比根節點大。
二、二叉平衡樹(AVL樹)
是二叉搜索樹的一種改進。爲了提高查找效率,保持左右子樹的平衡,規定左右子樹的高度最多相差1。
三、紅黑樹
是二叉平衡樹的變種,並不要求完全的平衡,相對於二叉平衡樹,紅黑樹再元素的插入和刪除操作上可以進行更少的旋轉操作,插入和刪除的性能更加優越。
下面主要介紹紅黑樹以及紅黑樹的一些操作,主要有查找、插入和刪除操作。
紅黑樹的平衡規則:
1.節點是紅色或黑色。
2.根節點是黑色。
3.每個葉子節點都是黑色的空節點(NIL節點)。
4 每個紅色節點的兩個子節點都是黑色。(從每個葉子到根的所有路徑上不能有兩個連續的紅色節點)
5.從任一節點到其每個葉子的所有路徑都包含相同數目的黑色節點。
下面就是一種紅黑樹:
紅黑樹保持平衡的方法有:變色和旋轉,旋轉分爲左旋和右旋。
漫畫動圖瞭解部分:
https://blog.csdn.net/chudelong1/article/details/82698010
代碼理解部分:
https://blog.csdn.net/eson_15/article/details/51144079?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task
C++中是以哦那個紅黑樹的結構來實現的有set和multiset。可以使用此類容器進行實現。