平衡查詢樹的目標是實現查詢、插入、刪除操作在最壞情況下的複雜度均為logn。
本節將介紹二三查詢樹。
二三樹中有兩種節點:
二三查詢樹非常平衡,每個空節點到根節點的距離都是一樣的 。
在二三樹中查詢乙個鍵的時候有以下規則:
根據查詢操作的規則,先定位到需要插入的節點。如果是二節點,那麼將二節點中增加乙個鍵成為三節點。如果是三節點,在三節點中增加1個鍵成為四節點。由於四節點不允許在二三樹中出現,因此需要分解成兩個二節點,並且把中間的鍵提取到父節點中。下圖展示四節點分解的過程:
現在要在這棵樹中插入乙個值7
首先根據查詢操作的規則定位到要插入的節點,定位之後是如圖所示的節點
由於該節點是三節點,因此插入乙個鍵,使它成為四節點
由於四節點不允許在2-3樹中存在,因此需要將其分解為兩個二節點,並把中間的鍵7提到父節點中
這樣插入操作就完成了
2-3樹的高度介於lgn和log_3(n)之間,因此能夠保證所有的操作複雜度均在logn以下
二三樹的實現非常複雜,因為要判斷每個節點的型別,插入節點的時候還需要判斷插入節點的位置,需要考慮的情況非常多。
平衡查詢樹
在前面我們說了二叉查詢樹,它在最壞的情況下是很糟糕的。下面我們來說一種查詢樹,這種這查詢樹能夠保證無論如何構造它,它的執行時間都是對數級別的。理想情況下我們希望能夠保持二分查詢樹的平衡性。在一棵含有n個結點的樹中,我們希望樹的高度為lgn,這樣我們就能保證所有查詢能在lgn次比較內結束,就和二分查詢...
《演算法》 3 3平衡查詢樹(1)
理想情況下如何保持二叉樹的平衡?這裡引入平衡查詢樹。2 3查詢樹定義 2 節點,含有乙個鍵 及其對應值 和兩條鏈結,左鏈結指向的節點的鍵小於該節點,右鏈結指向的節點的鍵大於該節點 3 節點,含有兩個鍵 及其對應值 和三條鏈結,左鏈結指向的節點的鍵都小於該節點,中鏈結指向的節點的鍵介於節點的兩個鍵之間...
《演算法》 3 3平衡查詢樹(2)
2 3查詢樹的實現採用紅黑二叉樹的簡單資料結構來表達 用這樣的資料結構表達,量不大 3.3.1.1 紅黑二叉樹表達2 3查詢樹 由一條紅色左鏈結相連的裡那個2 節點表示乙個3 節點 黑鏈結是2 3樹中的普通鏈結 沒有任何乙個節點同時和兩條紅鏈結相連 紅鏈結均為左鏈結 該樹是完美黑色平衡樹,即任意空連...