平衡二叉樹或者是空樹,或者是具有如下特徵的二叉排序樹:
(1 )左子樹和右子樹的深度之差的絕對值不超過1;
(2)左子樹和右子樹也是平衡二叉樹。
若將二叉樹上結點的平衡因子(balance f a ctor, bf)定義為該結點左子樹和右子樹的深度之 差,則平衡二叉樹上所有結點的平衡因子只可能覓-1、0和1。只要二叉樹上有乙個結點的平衡 因子的絕對值大於1 , 則該二叉樹就是不平衡的。下圖結點中的值為該結點的平衡因子。
紅黑樹是一種含有紅黑結點並能自平衡的二叉查詢樹。它必須滿足下面性質:
性質1:每個節點要麼是黑色,要麼是紅色。
性質2:根節點是黑色。
性質3:每個葉子節點都是黑色的空節點(nil節點)
性質4:每個紅色結點的兩個子結點一定都是黑色。
性質5:任意一結點到每個葉子結點的路徑都包含數量相同的黑結點。
從性質5又可以推出:
性質5.1:如果乙個結點存在黑子結點,那麼該結點肯定有兩個子結點
1、紅黑樹放棄了追求完全平衡,追求大致平衡,在與平衡二叉樹的時間複雜度相差不大的情況下,保證每次插入最多隻需要三次旋轉就能達到平衡,實現起來也更為簡單。
2、平衡二叉樹追求絕對平衡,條件比較苛刻,實現起來比較麻煩,每次插入新節點之後需要旋轉的次數不能預知。
紅黑樹與平衡二叉樹
性質1.節點是紅色或黑色。性質2.根節點是黑色。性質3.每個葉子節點都是黑色的空節點 nil節點 性質4 每個紅色節點的兩個子節點都是黑色。從每個葉子到根的所有路徑上不能有兩個連續的紅色節點 性質5.從任一節點到其每個葉子的所有路徑都包含相同數目的黑色節點。這些約束強制了紅黑樹的關鍵性質 從根到葉子...
平衡二叉樹 紅黑樹
顏色調整,第一種情況uncle存在且為紅色,第二種和第三種情況,uncle不存在 uncle存在且為黑色,先處理第三種情況,針對parent進行左單旋。test.cpp include using namespace std enum colour template struct rbtreenod...
二叉查詢樹 平衡二叉樹 紅黑樹
先看幾個基本概念 樹 由根出發,指向n個孩子,孩子再指向孫子。這樣一種資料結構 二叉樹 每個接點最多有兩個孩子的樹 二叉查詢樹 每個結點的左子樹 結點 右子樹 平衡二叉樹 每個結點左右子樹的高度差不大於1 紅黑樹 從任一節點到其每個葉子的所有簡單路徑 都包含相同數目的黑色節點。當然還有其它性質 幾點...