一開始是打算照著 stl 寫的,結果發現乙個尷尬的情況:
沒有allocator,std_config.h,iterator,所以這個 rbtree1 就擱置了。
後來 開始搞 rbtree2 ,又碰到了乙個很麻煩的問題。
stl 原始碼裡面有乙個實現技巧:
紅黑樹結點的結構是這樣的,
還有乙個 template struct node 繼承了node_base,
內部含有 _ty 型別的一筆資料。
在進行結點的操作和紅黑樹性質的恢復時 將結點看作是base_ptr,這樣做省去了模板,非常方便,要用 value 的時候再 static_cast 回來。
但是,我在寫結點的時候將其置入了智慧型指標,
然而在實現類內必須含有乙個 root 結點,因此必須為 帶值結點,對它和 base_ptr 操作額度時候會引發大量的問題。
後來找了一些玩意比如:std::static_pointer_cast,都還是沒有用。也就是說很難把 root 看作是base_ptr 來用。
之後又做了點愚蠢的事情:
實現類內加了乙個 base_ptr& 用來裝載root 的基類部分。但是最後發現那是乙個 dangling handlers,又以失敗而告終。
綜上導致了 rbtree2 的流產。
走投無路之下只能將所有型別劃歸統一,為了保留 rbtree2 ,我新開了 rbtree3。將所有結點操作統一型別有乙個問題:要求這個 nil 必須有乙個值,
於是要求 _ty 型別存在 預設建構函式,真心感覺這非常糟糕。
紅黑樹的原理 關於紅黑樹原理的一些介紹
紅黑樹 red black tree 是一種重要的資料結構,也經常會用到,c 的map就是使用紅黑樹來實現的。在程式設計師找工作的面試中,紅黑樹也是經常被問到的乙個知識點,我也是當時從找工作的時候嘗試去理解紅黑樹的一些結構和原理,但是由於找工作時間比較緊張,而且要了解的知識點比較多,所以當時對它也沒...
關於學習紅黑樹的一些小收穫與總結
先上 本人通過演算法導論對紅黑樹進行認識並根據書中的偽 實現乙個紅黑樹類。首先紅黑樹是乙個相對平衡的二叉樹 比到正真的平衡二叉樹,他節省了用來維護平衡的開銷 在二叉搜尋樹的基礎上通過5條性質來約束,通過這樣約束的樹就是二叉搜尋樹。第一 根節點是黑色 第二所有的葉子結點 其實只有乙個節點,該節點理解為...
紅黑樹下 紅黑樹的實現
1.實現紅黑樹的基本思想 實際上,紅黑樹是有固定的平衡過程的 遇到什麼樣的節點分布,我們就對應怎麼去調整。只要按照這些固定的調整規則來操作,就能將乙個非平衡的紅黑樹調整成平衡的。首先,我們需要再來看一下紅黑樹的定義 在插入 刪除節點的過程中,第 三 四點要求可能會被破壞,所以 平衡調整 實際上就是把...