AVL樹對二叉樹的要求較高,爲了維護查找的性能,所作的計算和操做比較複雜,維護成本比較大。爲了簡化維護的成本,同時又能保證查找的性能,提出了紅黑樹的概念。性能
如圖所示:spa
如圖所示:it
插入狀況須要分狀況討論:class
空樹到新增一個節點,直接插入節點而後變色,如圖所示:基礎
只有一個根節點的話,根結點是黑色的,那麼直接插入新增結點,如圖所示:二叉樹
插入結點N處父親結點P是紅色的,叔叔結點U是紅色的,結點N表示新插入的結點。須要再細分狀況討論進行討論:此狀況下紅黑樹的多是一顆完整的紅黑樹,也多是一顆紅黑樹的的一部分子樹;引用
如果一棵紅黑樹的子樹,須要分三步調整操做:im
如圖所示:
上圖節點中的1,2,3,4,5表明結點之下的子樹或是NIL結點,上圖中顯示的是一箇中間過渡狀態。後續都是以相似形式表示子樹d3
插入結點N處的父結點P爲紅色,叔叔結點U爲黑色,且新插入的結點N是結點P的右孩子,且結點P是結點G的右孩子,須要進行以下調整操做:總結
如圖所示:
插入結點N處的父結點P爲紅色,叔叔結點U爲黑色,且新插入的結點N是結點P的左孩子,且結點P是結點G的左孩子,須要進行以下調整操做:
如圖所示:
狀況三中的第二種狀況以及狀況4、狀況五相對來講比較抽象,下面我舉個例子來幫助你們理解,狀況3、狀況四和狀況五之間的關係,例子是從網上看到的紅黑樹相關例子,在此基礎上進行的調整,如圖所示:
如上圖所示對應狀況三,結點4表示新插入的結點N,結點5爲父結點P,結點8爲叔叔結點U,須要按照狀況三子樹狀況進行調整:
在經過狀況三的調整操做以後獲得的紅黑樹的狀態正好符合狀況四的描述,如圖所示:如上圖所示,結點7表示新插入的結點N,結點2爲父結點P,結點14爲叔叔結點U,結點11爲祖輩結點G,按照狀況四對應的操做進行調整,如圖所示:
通過狀況四的調整操做之後獲得的紅黑樹狀態正好符合狀況五的描述,如圖所示:
如上圖所示,結點2表示新插入的結點N,結點7爲父結點P,結點14爲叔叔結點U,結點11爲祖輩結點G,按照狀況五的操做進行調整,如圖所示:
經過示例咱們能夠看出,紅黑樹相關狀況之間的關係,狀況三的發生只是一個開始;根據狀況三的調整,可能會產生狀況四但不必定,也有多是會差生狀況三,也有多是狀況五,可是不管是什麼狀況,咱們只要記住對應的情況描述及相關的調整,就能夠對紅黑樹進行調整了。