對紅黑樹的不種見解

2021-06-21 09:16:40 字數 852 閱讀 3535

其實紅黑樹之所以那麼流行,是因為他很好的平衡了一對矛盾,就是平衡度與維持這個平衡度所需要的效能代價,何謂平衡度,這個術語是我自己發明的,平衡度即一棵二叉樹在固定高度的情況下能容納的結點數量,容納得最多則平衡度越大,所以完全平衡二叉樹的平衡度都大,平衡度大有什麼好處呢,很顯然,平衡度最大,則固定結點數量的二叉樹越矮,查詢越快,這就是完全平衡二叉樹的目的了。如果一棵二叉樹是唯讀的,後續不用修改,那麼用完全平衡二叉樹最好用了,但是一般情況下我們都要修改這棵樹,比如新增乙個結點或刪除乙個結點,這個時候,你會發現一棵完全平衡二叉樹很痛苦,因為插入了新的結點就打破了原有的平衡,要經過長時間的調整才能使樹恢復平衡,刪除結點也一樣,這就好比打破乙個生態環境的平衡一樣痛苦。完全平衡二叉樹走了查詢效率這個極端,還有另一種極端的做法是就是插入和刪點完全不調整,到最後那肯定是一棵很爛的棵樹了,查詢效率就等同於線性表了。

紅黑樹就做好了這兩個極端之間的平衡,無論你是插入還是刪除結點,他都能保證一趟搞定,一趟就是最多迴圈h次,h是樹的高度,當然查詢效率也不賴。他是怎麼做到的呢,以下就是猜測了,他的創始人肯定也是因為遇到完全平衡二叉樹的痛苦,所以他就要想辦法偷個懶唄,他就想啊,可不可以修改樹之後不需要調整樹的結構呢,但是不調整,久而久之平衡度就會很差,所以還是要調整,那能不能少調整幾次呢,比如有時候修改需要調整,有時候不需要調,所以我們可以引入的一種非正常的結點,這種結點很懶惰,插入之後可以不調整樹,但懶惰結點的數量也不能太多,太多了就又變成爛樹了,我們可以規定,懶惰結點不准連續,這樣可以限制其數量不會太多,另一方面,我們也要求不同路徑上正常結點的數量要相同,這樣以來兩個極端就都折衷了,再把正常結點標成黑,懶惰結點標成紅,就成了紅黑樹了,當然這都是我的猜測,但這樣可以更能看出紅黑樹的特點,所以我覺得將其改名為「懶惰結點平衡二叉樹」更為貼切。

未完,持續更新中...

黑與不黑的區別

最近聽到訊息聽說微軟要黑屏計畫,思量半天,竟得不出個所以然。微軟宣布要從下週一起對盜版xp進行強制黑屏驗證沒過多久,網上就冒出了多個破解黑屏的辦法。除了建議盜版使用者選擇關閉更新外,還有公布了刪除驗證項的辦法。大多數使用盜版xp的對微軟的這個強制驗證辦法感到是 小菜一碟 一位說,微軟此舉可歸為常規性...

紅黑樹筆記 紅黑樹的插入操作

紅黑樹的插入操作可以在o logn 的時間內完成。開始插入節點的時候和二叉查詢樹一樣,只需要最後將插入的節點著成紅色,為了保證紅黑樹的性質,需要通過rb insertfixup函式來調整該節點,對其重新著色並旋轉。下面先呼叫rb insert 函式將乙個節點插入到紅黑樹中,同樣先上偽 rb inse...

紅黑樹下 紅黑樹的實現

1.實現紅黑樹的基本思想 實際上,紅黑樹是有固定的平衡過程的 遇到什麼樣的節點分布,我們就對應怎麼去調整。只要按照這些固定的調整規則來操作,就能將乙個非平衡的紅黑樹調整成平衡的。首先,我們需要再來看一下紅黑樹的定義 在插入 刪除節點的過程中,第 三 四點要求可能會被破壞,所以 平衡調整 實際上就是把...