二叉搜尋樹 紅黑樹節點插入

2021-08-01 14:42:47 字數 2221 閱讀 9639

1.紅黑樹的概念:紅黑樹是一棵二叉搜尋樹,它在每個節點上增加乙個儲存位來表示節點的顏色,可以是red或black,通過對任何一條從根節點到葉子節點上的間單路徑來約束,紅黑樹保證最長路徑不超過最短路徑的兩倍,因而近視平衡。

2.紅黑樹的性質

滿足上訴性質的二叉搜尋樹是二叉搜尋樹

3.具體插入節點的步驟:

對於插入節點的雙親節點是紅色時,我們又分為三種情況對其調整

4.根據上述的五種情況,實現**

#include

#include

using namespace std;

enum color;

template

struct rbtreenode

rbtreenode* _pleft;

rbtreenode* _pright;

rbtreenode* _pparent;

k _key;

v _value;

color _color;

};template

class rbtree

bool insert(const k& key,const v& value)

void inorder()

bool checkrbtree()

int blackcount =

0; node* pcur = _proot;

while(pcur)

int k =

0; return _checkrbtree(_proot,blackcount,k);

}private:

bool _checkrbtree(node* proot,int blackcount,int k)

if(proot->_pleft ==

null

&& proot->_pright ==

null)

}return _checkrbtree(proot->_pleft,blackcount,k)&&_checkrbtree(proot->_pright,blackcount,k);

}void _inorder(node* proot)

bool _insert(const k& key,const v& value)

//找到要節點刪除的位置

node* pnode = _proot;

node* pparent =

null;

while(pnode)

else

if(pnode->_key < key)

else

}//已經找到

pnode =

new node(key,value);

if(pparent->_key > key)

else

//對紅黑樹進行調整

while(pparent && pparent->_color == red && pnode->_color == red)

else

//在處理情況三的過程中順便處理情況二

grandfather->_color = red;

pparent->_color = black;

_rotater(grandfather);}}

else

//在處理情況三的過程中順便處理情況二

else

grandfather->_color = red;//情況二

pparent->_color = black;

_rotatel(grandfather);}}

}_proot->_color = black;

}void _rotatel(node*& pparent)

void _rotater(node*& pparent)

private:

node* _proot;

};

測試**:

void funtest()

; for(size_t idx=0; idx

rbt.insert(array[idx],array[idx]);

rbt.inorder();

if(rbt.checkrbtree())

紅黑二叉樹節點的插入

進行紅黑樹節點的插入時候我們必須結合紅黑樹的性質,要不是真的很容易忙半天卻發現寫的 漏洞百出不符合紅黑樹的性質 每個結點不是紅色就是黑色 根節點是黑色的 如果乙個節點是紅色的,則它的兩個孩子結點是黑色的 對於每個結點,從該結點到其所有後代葉結點的簡單路徑上,均 包含相同數目的黑色結點 每個葉子結點都...

紅黑二叉查詢樹

擷取自 演算法 第四版 紅黑二叉查詢樹背後的基本思想是用標準二叉查詢樹 完全 由2 節點構成 和 一些額外的資訊 替換 3 節點 來表示 2 3樹。紅黑樹中的鏈結分為兩種 1 將兩個2 節點連線起來 構成3 節點的紅鏈結 2 2 3樹中的普通鏈結為黑鏈結 將兩個 2節點用左斜的紅色鏈結鏈起來可表示3...

紅黑二叉樹

紅黑二叉樹 紅黑二叉樹的基本思想是想用標準的二叉查詢樹 完全由2 結點構成 和一些額外的資訊 替換3 結點 來表述2 3樹。或者說,我們將3 結點表示為由一條左斜的紅色鏈結相 兩個2 結點其中之一是另乙個的左子節點 連的兩個2 結點。這種表示的優點 我們無需修改就可以直接使用標準二叉查詢樹的get ...