平衡二叉樹具有以下性質:它是一棵空樹或它的左右兩個子樹的高度差的絕對值不超過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樹的搜尋,從根結點開始,如果查詢的關鍵字與結點的關鍵字相等,那麼就命中 否則,如果查詢關鍵字比結點關鍵字小,就進...