紅黑樹

一、紅黑樹的介紹

先來看下算法導論對R-B Tree的介紹:
紅黑樹,一種二叉查找樹,但在每個結點上增加一個存儲位表示結點的顏色,可以是RedBlack
通過對任何一條從根到葉子的路徑上各個結點着色方式的限制,紅黑樹確保沒有一條路徑會比其他路徑長出倆倍,因而是接近平衡的。

紅黑樹,作爲一棵二叉查找樹,滿足二叉查找樹的一般性質。下面,來了解下 二叉查找樹的一般性質。

二叉查找樹

二叉查找樹,也稱有序二叉樹(ordered binary tree),或已排序二叉樹(sorted binary tree),是指一棵空樹或者具有下列性質的二叉樹:

  • 若任意節點的左子樹不空,則左子樹上所有結點的值均小於它的根結點的值;

  • 若任意節點的右子樹不空,則右子樹上所有結點的值均大於它的根結點的值;

  • 任意節點的左、右子樹也分別爲二叉查找樹。

  • 沒有鍵值相等的節點(no duplicate nodes)。

因爲一棵由n個結點隨機構造的二叉查找樹的高度爲lgn,所以順理成章,二叉查找樹的一般操作的執行時間爲O(lgn)。但二叉查找樹若退化成了一棵具有n個結點的線性鏈後,則這些操作最壞情況運行時間爲O(n)。


紅黑樹雖然本質上是一棵二叉查找樹,但它在二叉查找樹的基礎上增加了着色和相關的性質使得紅黑樹相對平衡,從而保證了紅黑樹的查找、插入、刪除的時間複雜度最壞爲O(log n)。

但它是如何保證一棵n個結點的紅黑樹的高度始終保持在logn的呢?這就引出了紅黑樹的5個性質:

  1. 每個結點要麼是紅的要麼是黑的。  

  2. 根結點是黑的。  

  3. 每個葉結點(葉結點即指樹尾端NIL指針或NULL結點)都是黑的。  

  4. 如果一個結點是紅的,那麼它的兩個兒子都是黑的。  

  5.  對於任意結點而言,其到葉結點樹尾端NIL指針的每條路徑都包含相同數目的黑結點。 

正是紅黑樹的這5條性質,使一棵n個結點的紅黑樹始終保持了logn的高度,從而也就解釋了上面所說的“紅黑樹的查找、插入、刪除的時間複雜度最壞爲O(log n)”這一結論成立的原因。

:上述第3、5點性質中所說的NULL結點,包括wikipedia.算法導論上所認爲的葉子結點即爲樹尾端的NIL指針,或者說NULL結點。然百度百科以及網上一些其它博文直接說的葉結點,則易引起誤會,因,此葉結點非子結點


如下圖所示,即是一顆紅黑樹(下圖引自wikipedia:http://t.cn/hgvH1l):

wKioL1R8IzeB9ieZAAEThGdjvXw472.jpg

此圖忽略了葉子和根部的父結點。同時,上文中我們所說的 "葉結點" 或"NULL結點",如上圖所示,它不包含數據而只充當樹在此結束的指示,這些節點在繪圖中經常被省略,望看到此文後的讀者朋友注意。 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章