enum color
;template
<
classk,
class
v>
struct rbnode
};
template
<
classk,
class
v>
class
rbtree
bool
insert
(const pair
& value)
//搜尋位置
pnode cur = _header-
>_parent;
pnode parent =
nullptr
;while
(cur)
cur =
newnode
(value);if
(parent-
>_value.first > cur-
>_value.first)
parent-
>_left = cur;
else
parent-
>_right = cur;
cur-
>_parent = parent;
//調整和更新(顏色)
while
(cur != _header-
>_parent && cur-
>_parent-
>_color == red)
else
//需要進行右旋 旋轉完結束調整
rotater
(gfather)
; gfather-
>_color = red;
parent-
>_color = black;
break;}
}//叔叔在左邊
else
else
//需要進行左旋
rotatel
(gfather)
; gfather-
>_color = red;
parent-
>_color = black;
break;}
}}_header-
>_parent-
>_color = black;
//更新_header->_left , _right;
_header-
>_left =
leftmost()
; _header-
>_right =
rightmost()
;}void
rotater
(pnode parent)
else
parent-
>_parent = subl;
}void
rotatel
(pnode parent)
else
parent-
>_parent = subr;
} pnode leftmost()
return cur;
} pnode rightmost()
return cur;
}bool
isrbtree()
//判斷每個路徑黑色個數相同
pnode cur = root;
int blackcount =0;
while
(cur)
int k =0;
return
_isrbtree
(root, k, blackcount);}
bool
_isrbtree
(pnode root,
int curblackcount,
int totalblack)
else
return
true;if
(root-
>_color == black)
++curblackcount;
pnode parent = root-
>_parent;
if(parent && parent-
>_color == red && root-
>_color == red)
return
_isrbtree
(root-
>_left, curblackcount, totalblack)
&&_isrbtree
(root-
>_right, curblackcount, totalblack);}
private
: pnode _header;
};
碼雲
github
C 紅黑樹(RBTree)的模擬實現
pragma once enum colour templatestruct rbtreenode templatestruct rbtreeiterator ref operator ptr operator ptr operator it self operator else node pare...
紅黑樹(c實現)
學習紅黑樹原理,網路上有很多文章。學習紅黑樹的具體實現,個人推薦去看jdk中的treemap原始碼。因為該原始碼很簡潔,並且很容易改為其它語言的實現,最重要的是該份實現得到世人的認可,可以保證是沒問題的 下面是我根據其實現,使用c語言改寫的紅黑樹實現,目前只有紅黑樹的插入實現。include inc...
紅黑樹C 實現
完整實現了一遍紅黑樹,程式就當作自己的筆記好了 紅黑樹,顧名思義,就是紅黑相間的樹,它借由紅黑規則實現了二叉排序樹的平衡。紅黑規則如下 1.每個節點不是紅就是黑 2.根總是黑色 3.若節點為紅色,它的子節點必須為黑色 4.從根到葉的每條路徑,必須包含相同數目的黑色節點 插入和刪除節點時都要遵循紅黑規...