紅黑數實現

2021-06-28 17:06:52 字數 1890 閱讀 7630

之前的作業,**中還有需要完善的地方,如記憶體管理等,先貼上實現**,後續會對紅黑樹的具體實現進行分析。

// author: sqxu

#include "stdafx.h"

#include using namespace std;

const int red=0;

const int black=1;

typedef struct rbtree

rbt; //定義結構體rbt

void leftrotate(rbt ** root, rbt * x); //左旋函式

void rightrotate(rbt ** root, rbt * x); //右旋函式

void rbinsertfixup(rbt ** root, rbt * z); //插入後的調整

void rbinsert(rbt ** root, rbt * z); //插入操作

void print(rbt * x); //列印乙個結點

void rbprint(rbt ** root); //列印一棵樹

int main()

for(int i=0; ikey = arrays[i]; //結點z的key值指向陣列中的元素

rbinsert(root, z); //將z指向的值插入到樹中

}cout<<"紅黑樹為:"if(x -> right != null && y != null)

x -> right = y -> left;

if(y != null && y -> left != null)

y -> left -> parent = x; //step2,y的左孩子與x的右孩子連線

if(y != null)

y -> parent = x -> parent;

if(x -> parent == null)

* root = y;

else

//step3,x的父結點作為y的父結點

if(y != null) }

void rightrotate(rbt ** root, rbt * x) //右旋函式

//step3,x的父結點作為y的父結點

if(y != null)

//step4,x與y交換

}void rbinsert(rbt ** root, rbt * z) //插入函式

z -> parent = y;

if(y == null)

* root = z;

else

//確定插入元素的位置

z -> left = null;

z -> right = null;

z -> color = red; //對插入點進行初始化

rbinsertfixup(root,z); //呼叫調整函式

}void rbinsertfixup(rbt ** root, rbt * z)

else //case2、case3

//case2轉換成case3

z -> parent -> color = black;

z -> parent -> parent->color = red;

rightrotate(root,z -> parent -> parent);}}

else //z的父結點為祖父結點的右孩子,操作同上

else

z -> parent -> color = black;

z -> parent -> parent -> color = red;

leftrotate(root,z -> parent -> parent);}}

}(*root)->color = black; }}

void print(rbt * x)

}

紅黑樹下 紅黑樹的實現

1.實現紅黑樹的基本思想 實際上,紅黑樹是有固定的平衡過程的 遇到什麼樣的節點分布,我們就對應怎麼去調整。只要按照這些固定的調整規則來操作,就能將乙個非平衡的紅黑樹調整成平衡的。首先,我們需要再來看一下紅黑樹的定義 在插入 刪除節點的過程中,第 三 四點要求可能會被破壞,所以 平衡調整 實際上就是把...

紅黑樹下 紅黑樹的實現

1.實現紅黑樹的基本思想 實際上,紅黑樹是有固定的平衡過程的 遇到什麼樣的節點分布,我們就對應怎麼去調整。只要按照這些固定的調整規則來操作,就能將乙個非平衡的紅黑樹調整成平衡的。首先,我們需要再來看一下紅黑樹的定義 在插入 刪除節點的過程中,第 三 四點要求可能會被破壞,所以 平衡調整 實際上就是把...

紅黑樹實現

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