STL學習 紅黑樹學習

2021-08-23 12:09:27 字數 881 閱讀 6778

rb-tree是被廣泛運用的平衡二叉搜尋樹。

這裡只是記錄一下我個人覺得重要的東西,就沒有圖了。

強烈推薦《stl原始碼分析》這本書,上面講得比較清楚。

(1)每個節點不是紅色就是黑色。

(2)根節點為黑色。

(3)如果節點為紅,則其子節點為黑。

(4)任一節點至bull(樹尾端),黑節點數必須相同。

插入時紅黑樹的平衡是由各種旋轉來保證的,大概有四種不同的旋轉情況,別的部落格裡都有,

而為了防止出現父子節點皆為紅色,並且不斷向上衍生的情況。

我們需要設定乙個程式:

(1)假設新增節點為a,那麼就沿著a的路徑,只要看到有某個節點x的兩個子節點皆為紅色,就把x改為紅色,子節點為黑色

(2)如果x的父節點也為紅色,那麼就要做一次單旋轉(或雙旋轉)並改變顏色

這樣做以後,就可以減少插入時的複雜度。

以實現operator++舉例,其他的也差不多:

++主要是遞增到比當前節點大一點的資料,對於當前節點x

(1)x如果有右子節點,則進入並且一直往左走到底

(2)x如果沒有右子節點,則一直上溯,直到不為右子節點為止

(3)如果此時的右子節點不等於此時的父節點,此時的父節點即為解答

(4)否則此時的node為解答

這是紅黑樹提供的兩種插入操作,insert_unique()要保證插入的鍵值在整個樹中獨一無二,insert_equal()則表示插入的鍵值在整棵樹中可以被重複。

正因為如此,set與multiset的特性和用法與set相同,但是差別就在於multiset採用了紅黑樹的insert_equal(),所以它能夠插入相同的鍵值。

紅黑樹 學習

紅黑樹筆記 紅黑樹是一顆二叉平衡樹,查詢不會破壞平衡性,所以和二叉平衡術查詢方式一致。從根節點開始查詢,為空就返回null,為當前值就返回,否則繼續向下查詢。如果當前節點的key為要查詢的節點的key,那麼直接返回當前值。如果當前節點的key大於要查詢的節點的key,那麼繼續向當前節點的左子節點查詢...

紅黑樹學習筆記

二叉樹,他的定義是每個節點最多只有兩個子樹 即左子樹和右子樹,當然也可以沒有子樹 如下圖是乙個簡單的二叉樹 對於這樣的資料結構,在c語言中通常這樣來定義結構體?1 2 3 4 5 typedefstruct binary tree binarytree 二叉搜尋樹,首先他也是乙個二叉樹,與二叉樹不同...

紅黑樹學習筆記

因為學習hashmap的時候,遇到了紅黑樹,故而複習哈,想深度學習的請轉到下面鏈結,作者 並茂的詳細講解了哈,分析的很清楚,覺得好的不忘給別人手動比心。30張圖帶你徹底理解紅黑樹 因為從這裡開始,是自己的學習筆記,從上面提到的文章中學習總結的,主要是為了給自己看,記錄哈,容易忘記,純概念,可能比較苦...