紅黑樹和B+樹一看就懂


紅黑樹:二叉查找樹+平衡二叉樹(大致平衡的)

核心性質:從根節點到任意葉子節點最長的路徑不大於最短路徑的二倍。

在插入和刪除操作中核心性質可能不再滿足,所以在插入刪除中要進行判斷是否滿足,但是直接判斷是否滿足核心性質麻煩,就用了五條容易判斷的性質進行等價替換。

五條性質:

1.根節點是黑色的。

2.節點非黑即紅。

3.不每條路徑上不能有連續兩個紅色節點。

4.從任意節點到葉子節點黑節點數量相同。

5.葉子節點都是黑色的。

為了算法的描述方便設置每個葉子節點都是黑色哨兵節點。

 

插入過程(五條):默認插入的節點是紅色節點,要是默認是黑色的會很麻煩(由於性質4)。

1.如果插入節點的父節點不存在就將顏色改為黑色。(因為這個節點就是根節點)

void case1(node){

  if(node.parent==NULL){

  node.color = black;

}else {

  case2(node)

}

}

****插入過程的五條判斷實際上都是五個函數,並且內部都是一個if-else判斷,在if中判斷,else中調用下一個函數。形式都是上邊這種

2.如果插入的節點的父節點是黑色,則ok,zhijiereturn。

3.如果插入的節點的父親節點和叔叔節點是紅色,則變化父叔節點為黑色,再把祖父節點變為紅色,然后將祖父節點作為node,從case1開始判斷。

4.

(1)父節點P是紅色而叔父節點U是黑色或缺少,並且新節點N是其父節點P的右子節點而父節點P又是其父節點的左子節點。

  則父進行左旋,然后執行case5.

   (2)父節點P是紅色而叔父節點U是黑色或缺少,並且新節點N是其父節點P的左子節點而父節點P又是其父節點的右子節點。

  則父進行右旋,然后執行case5.

5.父變黑,祖父變紅

(1)父節點P是紅色而叔父節點U是黑色或缺少,並且新節點N是其父節點P的右子節點而父節點P又是其父節點的右子節點。

  則祖父進行左旋

   (2)父節點P是紅色而叔父節點U是黑色或缺少,並且新節點N是其父節點P的左子節點而父節點P又是其父節點的左子節點。

  則祖父進行右旋

左旋就是:逆時針

右旋就是:順時針

 

刪除操作六條:形式也是六個函數,if-else格式的。

  1.刪除的是根,直接刪。

  2.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM