C 模擬實現紅黑樹

2021-10-05 04:08:28 字數 2395 閱讀 8971

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.從根到葉的每條路徑,必須包含相同數目的黑色節點 插入和刪除節點時都要遵循紅黑規...