紅黑樹與AVL樹同樣同爲二分搜索樹,紅黑樹又稱爲是保持「黑平衡」的二叉樹,紅黑樹最大高度爲:2logn,紅黑樹由這麼幾個獨特的特徵:
一、每一個節點或黑或紅
二、根節點爲黑色
三、每一個葉子節點(最後的空節點)都爲黑色
四、若是一個節點爲紅色,則他孩子節點全爲黑色
五、從任意節點到葉子節點,通過的黑色節點爲同樣多的
六、全部紅色節點都向左傾斜code
在以前的二叉搜索樹中咱們在實現的節點結構中定義了用於存儲元素的e、用於存放左子樹的left、用於存放右子樹的right等對象,而在AVL樹中比二叉搜索樹有所不一樣因爲AVL須要維護左右子樹的節點高度因此多了一個元素height用於存放節點的高度;
紅黑樹也是基於以前二叉搜索樹變體而來的,在紅黑樹中節點也只比二叉搜索樹多一個元素,二叉搜索樹的節點由如下元素組成:對象
e :用於存儲節點元素
left: 用於存儲左子樹
right:用於存儲右子樹
color:用於標誌節點顏色,節點是紅色或黑色blog
type RBT struct { root *RBTNode size int compare Comparable } type RBTNode struct { e interface{} left *RBTNode right *RBTNode color bool }
根據紅黑樹的特性、定義可知:
一、大小爲N的紅黑樹其高度不超過2logN
二、最壞狀況下插入、查找元素的時間複雜度爲:2logN
三、平均狀況下插入、查找元素的平均複雜度爲:logNip
這裏只簡單介紹了紅黑樹的相關概念,下面將從代碼實現的角度具體分析紅黑樹的實現;io