紅黑樹

最近看到講解紅黑樹時, 感覺其中代碼寫得很不錯. 自己受益匪淺, 首先STL關(guān)聯(lián)容器中map和set是由紅黑樹實(shí)現(xiàn)的.而符合STL的標(biāo)準(zhǔn), 則必須提供begin() 和 end() 2個迭代器, 那么在STL的紅黑樹中是怎么表示這兩個迭代器的呢?
紅黑樹的結(jié)點(diǎn)結(jié)構(gòu):

template<typename T>
struct RBTreeNode{
    T data;
    bool ColorType;
    RBTreeNode *parent;
    RBTreeNode *leftChild;
    RBTreeNode *rightChild;
};

STL用的方法是用一個虛擬的_header結(jié)點(diǎn), 其leftChild指向整棵樹中最小的結(jié)點(diǎn)(最左結(jié)點(diǎn)), 其中rightChild指向整棵樹中最大的結(jié)點(diǎn)(最右結(jié)點(diǎn)). 其parent指向根節(jié)點(diǎn)root, 而begin() 所指向的是_header結(jié)點(diǎn)的左leftChild結(jié)點(diǎn), 而end()所指向的是虛擬結(jié)點(diǎn)_header本身.
初始化如下圖所示:

初始化.jpg

插入一個結(jié)點(diǎn):

插入一個結(jié)點(diǎn).jpg

插入n個結(jié)點(diǎn):

插入n個結(jié)點(diǎn).jpg

好, 現(xiàn)在把基礎(chǔ)結(jié)構(gòu)描述清楚后, 據(jù)可以寫具體迭代器++ 和迭代器--的操作了.
本來想寫個玩具STL, 更一系列的文章,但學(xué)校破事太多,看來只有暑假在做這個事了,平時就寫些零散的權(quán)當(dāng)復(fù)習(xí)準(zhǔn)備秋招了。

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

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

  • 一. 算法之變,結(jié)構(gòu)為宗 計算機(jī)在很多情況下被應(yīng)用于檢索數(shù)據(jù),比如航空和鐵路運(yùn)輸業(yè)的航班信息和列車時刻表的查詢,都...
    Leesper閱讀 7,402評論 13 42
  • 數(shù)據(jù)結(jié)構(gòu)與算法--從平衡二叉樹(AVL)到紅黑樹 上節(jié)學(xué)習(xí)了二叉查找樹。算法的性能取決于樹的形狀,而樹的形狀取決于...
    sunhaiyu閱讀 7,815評論 4 32
  • 二叉搜索樹,平衡樹,B,b-,b+,b*,紅黑樹 二叉搜索樹 ? 1.所有非葉子結(jié)點(diǎn)至多擁有兩個兒子(Le...
    raincoffee閱讀 4,124評論 3 18
  • 原文鏈接 二叉查找樹 由于紅黑樹本質(zhì)上就是一棵二叉查找樹,所以在了解紅黑樹之前,咱們先來看下二叉查找樹。 二叉查找...
    非典型程序員閱讀 2,942評論 2 5
  • 最近花了些時間重拾數(shù)據(jù)結(jié)構(gòu)的基礎(chǔ)知識,先嘗試了紅黑樹,花了大半個月的時間研究其原理和實(shí)現(xiàn),下面是學(xué)習(xí)到的知識和一些...
    hoohack閱讀 1,595評論 8 30

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