一、紅黑樹
紅黑樹(red black tree) 是一種自平衡二叉查詢樹,是在
電腦科學中用到的一種
資料結構
,典型的用途是實現
關聯陣列
。可以保證最長路徑不超過最短路徑的2倍,近似平衡。
二、性質
性質1. 節點是紅色或黑色。
性質2. 根節點是黑色。
性質3 每個葉節點(nil節點,空節點)是黑色的。
性質4 每個紅色節點的兩個子節點都是黑色。(從每個葉子到根的所有路徑上不能有兩個連續的紅色節點)
性質5. 從任一節點到其每個葉子的所有路徑都包含相同數目的黑色節點。
三、實現**:
(1) 插入新的節點:
第一種情況:cur(新)為紅,p(父)為紅,g(祖)為黑,u(叔)存在且為紅;-------->p變為黑,g為紅,u為黑
第二種情況:cur(新)為紅,p(父)為紅,g(祖)為黑,u(叔)不存在或者u為黑;-------->p變為黑,g為紅,u為黑
第三種情況:cur(n)為紅,p為紅,g為黑,u不存在或者u為黑;------>旋轉為第二種情況,交換n和p節點。
(2)判斷是否平衡
判斷是否出現連續紅色的情況;
判斷各支路是否黑色節點相等;
(3)實現如下:
#pragma once
#includeusing namespace std;
enum color;
templatestruct rbtreenode
rbtreenode* _left;
rbtreenode* _right;
rbtreenode* _parent;
k _key;
v _value;
color _col;
};templateclass rbtree
void insert(k key,v value)
node* cur=_root;
node* parent=null;
while(cur)
else if(cur->_key_right;
} if(parent->_key>key)
else if(parent->_key_right=new node(key,value);
parent->_right->_parent=parent;
cur=parent->_right;
} //_root->_col=black;
//第一種情況:cur為紅,p為紅,g為黑,u不存在或者為紅
while(cur!=_root&&parent->_col==reb)
else
parent->_col=black; //第二種情況:
grandfather->_col=reb;
rotater(grandfather); //以grandfather為軸右旋
break;}}
else
else
//第二種情況
parent->_col=black;
grandfather->_col=reb;
rotatel(grandfather);
break;//以grandfather為軸左旋}}
} _root->_col=black;
}bool isbalance()
cur=cur->_left;
} int count=0;
return _isbalance(_root,key,count);
} void inorder()
private:
void rotatel(node* parent)
else
parent->_right=null;
if(ppnode&&ppnode->_left==parent)
else if(ppnode&&ppnode->_right==parent)
else if(ppnode==null)
}void rotater(node* parent)
else
parent->_left=null;
if(ppnode&&ppnode->_left==parent)
else if(ppnode&&ppnode->_right==parent)
else if(ppnode==null)
}void _inorder(node* root)
_inorder(root->_left);
cout<_key>";
_inorder(root->_right);
} bool _isbalance(node* root,int key,int count)
if(root->_col==reb&&root->_parent->_col==reb)
if(root->_left==null&&root->_right==null&&key!=count)
private:
node* _root;
};
#include"rbtree.h"
int main()
; for(int i=0;i
{ //cout<
4、結果:
資料結構 紅黑樹
紅黑樹是二叉排序樹的改進,紅黑樹有幾個特點 1 節點只有2中顏色,紅色和黑色。2 根節點一定是黑色節點。3 紅色節點的子節點一定是黑色節點。4 黑色高度 根節點到每個葉子節點的路徑長度包含相同的黑色節點 相等。規定的插入的節點一定是紅色節點,紅黑樹的插入節點後需要調整的規則,插入節點需要調整的情況有...
資料結構 紅黑樹
紅黑樹是一棵二叉搜尋樹,它在每個節點上增加了乙個儲存位來表示節點的顏色,可以是紅色也可以是黑色。通過對任何一條從根到葉子簡單路徑上的顏色來約束,紅黑樹保證最長路徑不超過最短路徑的兩倍,因而近似於平衡。紅黑樹滿足下面的性質 1 每個節點,不是紅色就是黑色的 2 根節點是黑色的 3 如果乙個節點是紅色的...
資料結構 紅黑樹
資料結構之紅黑樹 一 什麼是紅黑樹?紅黑樹是一棵二叉搜尋樹,它在每個結點上增加了乙個儲存位來表示結點的顏色,可以是red或者black,通過對任何一條從根節點到葉子結點上的簡單路徑來約束,紅黑樹保證最長路徑不超過最短路徑的兩倍,因而近似平衡。二 紅黑樹滿足的條件?1.每個結點不是紅色就是黑色 2.根...