紅黑樹——定義及接口

由紅、黑兩類節(jié)點(diǎn)組成的BST //亦可給邊染色

(統(tǒng)一增設(shè)外部節(jié)點(diǎn)NULL,使之成為真二叉樹)

1)樹根:必為黑色

2)外部節(jié)點(diǎn):均為黑色

3)其余節(jié)點(diǎn):若為紅,則只能有黑孩子 //紅之子、之父必黑

4)外部節(jié)點(diǎn)到根:途中黑節(jié)點(diǎn)數(shù)目相等 //黑深度


(2,4)樹==紅黑樹

提升各紅節(jié)點(diǎn),使之與其(黑)父親等高——于是每棵紅黑樹都對(duì)應(yīng)于一顆(2,4)-樹

將黑節(jié)點(diǎn)與其紅孩子視作(關(guān)鍵碼并合并為)超級(jí)節(jié)點(diǎn)

無(wú)非四種組合,分別對(duì)應(yīng)于4階B-樹的一類內(nèi)部節(jié)點(diǎn)

接口定義:

template <typename T> class RedBlack:public BST<T> {

public:? ? //BST::search()等其余接口可直接沿用

? ? ? ? ? ? ? BinNodePosi(T) insert (const T & e); //重寫插入

? ? ? ? ? ? ? bool remove(const T & e); //重寫刪除

protected:? ? void solveDoubleRed(BinNodePosi(T) x); //雙紅修正

? ? ? ? ? ? ? void solve Double Black(BinNodePosi(T) x); //雙黑修正

? ? ? ? ? ? ? int updateHeight(BinNodePosi(T) x); //更新節(jié)點(diǎn)x的高度

};

template <typename T> int RedBlack<T>::updateHeight(BinNodePosi(T) x) {

x->height = max(stature(x->lc),stature(x->rc));

if(IsBlack(x)) x->height++; return x->height; //只計(jì)黑節(jié)點(diǎn)

}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容