平衡二叉樹 紅黑樹 B樹 B 樹總結

2022-04-29 09:39:11 字數 2147 閱讀 9096

平衡二叉樹具有以下性質:它是一棵空樹或它的左右兩個子樹的高度差的絕對值不超過1,並且左右兩個子樹都是一棵平衡二叉樹。

作用:當原序列有序時,提高搜尋效率。

平衡因子:平衡二叉樹中不存在平衡因子大於 1 的節點。在一棵平衡二叉樹中,節點的平衡因子只能取 0 、1 或者 -1。

最小失衡子樹:在新插入的結點向上查詢,以第乙個平衡因子的絕對值超過 1 的結點為根的子樹稱為最小不平衡子樹。也就是說,一棵失衡的樹,是有可能有多棵子樹同時失衡的。而這個時候,我們只要調整最小的不平衡子樹,就能夠將不平衡的樹調整為平衡的樹。失衡調整主要是通過旋轉最小失衡子樹來實現的。

四種插入方式旋轉情況

1、a的左孩子的左子樹插入節點(ll)

2、a的右孩子的右子樹插入節點(rr)

3、a的左孩子的右子樹插入節點(lr)

4、a的右孩子的左子樹插入節點(rl)

刪除操作

插入操作後只需要對插入棧中的彈出的第乙個非平衡節點進行修正,而刪除操作需要修正棧中的所有非平衡節點。

四種情況:

刪除葉子節點、刪除的節點只有左子樹、刪除的節點只有右子樹、刪除的節點既有左子樹又有右子樹

b樹的建立就是為了優化資料庫查詢。

調整成b樹結構如下:

一顆m階的b樹定義如下:

1、每個結點最多有m-1個關鍵字。

2、根結點最少可以只有1個關鍵字。

3、非根結點至少有math.ceil(m/2)-1個關鍵字。

4、每個結點中的關鍵字都按照從小到大的順序排列,每個關鍵字的左子樹中的所有關鍵字都小於它,而右子樹中的所有關鍵字都大於它。

5、所有葉子結點都位於同一層,或者說根結點到每個葉子結點的長度都相同。

1、單一節點儲存更多的元素,使得查詢的io次數更少。(非子葉結點都存放的是索引,只有葉子結點才帶有衛星資料;而b樹的每個節點都有衛星資料,那這樣b+樹的結點會多出空間來放元素,也意味著b+樹比b樹還要矮胖);

2、所有查詢都要查詢到葉子節點,查詢效能穩定。(b樹最好的情況是根結點就是結果,最壞是葉子結點;而b+樹的資料都要在葉子結點中的衛星資料獲取)

3、所有葉子節點形成有序鍊錶,便於範圍查詢。(如果想查詢乙個範圍,b樹的時間複雜度要比b+樹高很多)

紅黑樹是一種自平衡二叉查詢樹,主要是為了解決二叉查詢樹多次插入新節點而導致的不平衡提出。

紅黑樹的查詢、刪除、新增操作都為log(n)。

紅黑樹近似平衡:深度最大的節點的深度<= 2 * 深度最小的節點的深度。

應用:linux程序排程、hashmap、treemap、c++中的map和set、epoll在核心中的實現(用紅黑樹管理事件塊)、nginx(用紅黑樹管理timer)。

性質

性質1:節點是紅色或黑色。

性質2:根節點是黑色。

性質3:每個葉節點是黑色。

性質4:每個紅色節點的兩個子節點都是黑色。(從每個葉子到根的所有路徑上不能有兩個連續的紅色節點)

性質5:從任一節點到其每個葉子的所有路徑都包含相同數目的黑色節點。

二叉搜尋樹 平衡二叉樹 紅黑樹 B樹 B 樹面試題

二叉搜尋樹是簡單的左子樹結點小於等於它的根節點,右子樹結點值大於等於它的根結點 由於查詢效率和樹的層次有關,二叉搜尋樹可能出現都連在左邊或者右邊,退化成煉表所以需要平衡及使樹的層次最小的二叉搜尋樹,成為平衡二叉樹。但頻繁插入結點會使時間浪費在維持二叉樹平衡上,所以出現了紅黑樹。紅黑樹使盡量做到平衡,...

二叉搜尋樹 平衡二叉樹 B樹 B 樹 B 樹

二叉查詢樹,由於不平衡,如果連續插入的資料是有順序的 會導致如下圖b的所示,此時搜尋會退化到o n 二叉查詢樹,也稱二叉搜尋樹,或二叉排序樹。其定義也比較簡單,要麼是一顆空樹,要麼就是具有如下性質的二叉樹 1 若任意節點的左子樹不空,則左子樹上所有結點的值均小於它的根結點的值 2 若任意節點的右子樹...

B樹 B 樹 B 樹 B 樹 紅黑樹

b樹 即二叉搜尋樹 1.所有非葉子結點至多擁有兩個兒子 left和right 2.所有結點儲存乙個關鍵字 3.非葉子結點的左指標指向小於其關鍵字的子樹,右指標指向大於其關鍵字的子樹 如 b樹的搜尋,從根結點開始,如果查詢的關鍵字與結點的關鍵字相等,那麼就命中 否則,如果查詢關鍵字比結點關鍵字小,就進...