第三章 3 3平衡二叉樹

2021-08-07 11:28:10 字數 1648 閱讀 3883

在本節中,我們會介紹一種二分查詢樹並能保證無論如何構造它,它的執行時間都是對數級別的。在理想情況下,我們希望能保持二分查詢樹的平衡性。在一棵含有n個結點的樹中,我們希望樹的高位~lgn,這樣我們能保證所有查詢都能在~lgn次比較內結束,就像二分查詢一樣。

3.3.1 2-3 查詢樹

定義

一棵2 3 查詢樹或為一棵空樹,有以下結點組成:

一棵完美平衡的2-3查詢樹中的所有空鏈結到根結點的距離都是相同的。

3.3.1.1 查詢

將二叉查詢樹的查詢演算法一般化就是2-3樹的查詢演算法。

3.3.1.2 構造平衡二叉樹

現將結點從根結點處比較,從上到下,一直到空鏈結處,然後將鍵插入結點,如果結點為4-結點,則將中間鍵依次向上傳遞,然後**結點,直到二叉樹平衡為止。

3.3.2 紅黑二叉查詢樹

對於2-3樹的插入演算法並不難理解,我們要學習一種名為紅黑二叉查詢樹的簡單資料結構來表達實現它

3.3.2.1 替換3-結點

紅黑二叉查詢樹背後的基本思想是用標準的二叉查詢樹(完全由2-結點組成)和一些額外的資訊(替換3-結點)來表示2-3樹。我們將樹中的鏈結分為兩種型別:紅鏈結將兩個2-結點鏈結起來構成乙個3-結點,黑鏈結則是2-3樹中的普通鏈結。確切地說,我們將3-結點表示為由一條左斜的紅色鏈結相連的兩個2-結點,這種做法乙個優點是,我們無需修改標準二叉樹的get方法。

等價定義

滿足這樣定義的紅黑樹和相應的2-3樹是一一對應的。

3.3.2.3 一一對應

如果將一棵紅黑樹中的紅鏈結畫平,那麼所有的空鏈結到根結點的距離都將相同,如果我們將紅色鏈結相連的結點合併,那就是一棵2-3樹。相反,如果將2-3樹中的3-結點畫作由紅色左鏈結相連的兩個2-結點,那麼不會存在能夠和兩條紅色鏈結相連的結點。且樹必然是完美黑色平衡的,因為黑鏈結即2-3樹中的普通鏈結,根據定義這些鏈結必然是完美平衡的。無論我們選擇用何種方式去定義它們,紅黑樹既是二叉查詢樹,也是2-3樹。由此我們可以將兩個演算法的優點結合起來:二叉查詢樹中簡潔高效的查詢方法和2-3樹中高效的平衡插入演算法。

3.3.2.4 顏色表示

因為每個結點都只有一條指向自己的鏈結,我們將鏈結的顏色儲存在表示結點的node資料型別的布林變數color中,如果它的鏈結是紅色,那麼變數為true,黑色則為false。我們約定空鏈結為黑色。並且,我們定義了兩個常量red和black來設定和測試這個變數。我們使用私有方法isred()來測試乙個結點和它的父結點之間的鏈結的顏色。當我們提到乙個結點的顏色時,我們指的是指向該結點的鏈結的顏色。

3.3.2.5 旋轉

在我們實現的某些操作中可能會出現紅色右鏈結或者兩條連續的紅鏈結,但在操作完成前這些情況都會被小心得旋轉並修復。旋轉操作會改變紅鏈結的指向。首先,假設我們有一條紅色的右鏈結需要被轉化為左鏈結。這個操作叫做左旋轉,它對應的方法接受一條指向紅黑樹中的某個結點的鏈結作為引數。假設被指向的結點的右鏈結是紅色的,這個方法會對樹進行必要調整並返回乙個指向包含同一組鍵的子樹且其左鏈結為紅色的根結點的鏈結。 

《演算法》第三章 二叉查詢樹中的遞迴

如果給定的鍵key小於二叉查詢樹的根節點的鍵,那麼小於等於key的最大鍵floor key 一定在根節點的左子樹中 如果給定的鍵key大於二叉查詢樹的根節點,那麼只有當根節點右子樹中存在小於等於key的節點時,小於等於key的最大鍵才會出現在右子樹中,否則根節點就是小於等於key的最大鍵。在以nod...

平衡二叉樹例題 平衡二叉樹

acwing 72.平衡二叉樹 思路一 求每個節點的左右子樹深度,根據深度差判斷,直到葉子節點結束,效率不夠高,每個節點都要用兩次計算深度的遞迴函式 思路二 從葉子節點開始,計算深度差,一旦有深度差大於1的,就直接返回0,也不用管上面的深度是不是正確了,畢竟我們只需要true和false兩種狀態,省...

DeepChem手冊第三章3 3教程

3.3 教程 如果你剛接觸deepchem,你可能了解基礎。deepchem是什麼?為什麼你要使用它?簡單的回答案deepchem是乙個科學的機器學習庫。chem 提示乙個歷史事實是deepchem早期是注重於化學應用的,但是我們現在更廣泛的支援所有的科學應用。為什麼你想用deepchem而不是其它...