紅黑樹(c實現)

2021-06-29 13:54:14 字數 1415 閱讀 9188

學習紅黑樹原理,網路上有很多文章。學習紅黑樹的具體實現,個人推薦去看jdk中的treemap原始碼。因為該原始碼很簡潔,並且很容易改為其它語言的實現,最重要的是該份實現得到世人的認可,可以保證是沒問題的**。

下面是我根據其實現,使用c語言改寫的紅黑樹實現,目前只有紅黑樹的插入實現。

#include #include enum color ;

typedef struct node node , *tree;

node* p(node* x)

node* u(node* x)

else

}int color(node* x)

else

}void ll(tree &t,node *x)

y->parent = x->parent;

if(x->parent != null)

else

} else

y->left = x;

x->parent = y; }}

void rr(tree &t,node *x)

y->parent = x->parent;

if(p(x) != null)

else

} else

y->right = x;

x->parent = y;

} }void fixupafterinsert(tree &t,node *x)

else

//然後著色,父黑色,祖父是紅色

p(x)->color = black;

p(p(x))->color = red;

rr(t,p(p(x)));

//此時黑色的父是根,x是左子,祖是右子

//調整完畢

}} else else

//著色,然後左旋

p(x)->color = black;

p(p(x))->color = red;

ll(t,p(p(x)));

}} }

//此處處理根

t->color = black;

}void print(node *x)

}void insert(tree &t ,int n)

else else

} x = (node*)malloc(sizeof(node));

x->left = null;

x->right = null;

x->value = n;

x->color = red;

x->parent = p;

if(n < p->value)

else

fixupafterinsert(t,x); }}

int main(void)

該原始碼確定能夠執行。

紅黑樹C 實現

完整實現了一遍紅黑樹,程式就當作自己的筆記好了 紅黑樹,顧名思義,就是紅黑相間的樹,它借由紅黑規則實現了二叉排序樹的平衡。紅黑規則如下 1.每個節點不是紅就是黑 2.根總是黑色 3.若節點為紅色,它的子節點必須為黑色 4.從根到葉的每條路徑,必須包含相同數目的黑色節點 插入和刪除節點時都要遵循紅黑規...

紅黑樹實現

紅黑樹 是一棵二叉搜尋樹,它在每個節點上增加了乙個儲存位來表示節點的顏色,可以是red或black。通過對任何一條從根到葉子簡單路徑上的 顏色來約束,紅黑樹保證最長路徑不超過最短路徑的兩倍,因而近似於平衡 由於性質中紅色節點不連續,最短路徑可為全是連續黑結點,最長路徑則由於紅節點不連續,則每間隔乙個...

紅黑樹實現

按演算法導論裡的偽 用c 實現了紅黑樹。實現過程中,參考了nginx的紅黑樹實現,特別是右旋的實現,演算法導論裡沒有給出,就借鑑了nginx的實現。對比了nginx的紅黑樹實現和演算法導論裡的偽 插入基本上一樣的,刪除兩者有點差別,但思路應該是一樣的。實現過程中需要注意的是,空葉子結點一定要實現,不...