《演算法》 3 3平衡查詢樹(1)

2021-08-03 22:14:46 字數 1545 閱讀 9124

理想情況下如何保持二叉樹的平衡?這裡引入平衡查詢樹。

2-3查詢樹定義:

2-節點,含有乙個鍵(及其對應值)和兩條鏈結,左鏈結指向的節點的鍵小於該節點,右鏈結指向的節點的鍵大於該節點;

3-節點,含有兩個鍵(及其對應值)和三條鏈結,左鏈結指向的節點的鍵都小於該節點,中鏈結指向的節點的鍵介於節點的兩個鍵之間,右鏈結指向的節點的鍵都大於該節點;

指向一棵空樹的鏈結成為空鏈結;

3.3.1.1 查詢

將二叉樹的查詢演算法一般化:向將要查詢的節點與根節點比較,如果和任意乙個相等則命中,否則根據比較結果到相應的鏈結(左、中、右)查詢,並在其指向的子樹中查詢;直到最後找到空連線,則查詢未命中。

3.3.1.2 向2-節點中插入新鍵

先進行一次未命中查詢,找到新結點將要插入的位置(某乙個葉子節點的底部);

該葉子節點是2-節點,直接將該2-節點變成乙個新的含有新建的3-節點

3.3.1.3向一課只含有乙個3-節點的樹中插入新鍵

先進行一次未命中查詢,找到新結點將要插入的位置;

將該3-節點變成乙個含新鍵的4-節點(左鍵、中鍵、右鍵);

3.3.1.4向乙個父節點為2-節點的3-節點中插入新鍵

先進行一次未命中查詢,找到新結點將要插入的位置;

將3-節點變成4-節點;

將中鍵節點加入到父節點2-節點中,變成3-節點,中鏈結指向左鍵節點,右鏈結指向右鍵節點;

(插入後所有空連線到根節點的距離仍然相同,樹仍完美平衡;)

3.3.1.5向乙個父節點為3-節點的3-節點中插入新鍵

先進行一次未命中查詢,找到新結點將要插入的位置(乙個3-節點);

將要插入位置的3-節點變成4-節點;

再用這個中間向上(父節點)構造臨時的4-節點,並變換鏈結;

再分解這個父節點,將它的中鍵插入到它的父節點中,直到遇到乙個2-節點並將它替換為乙個不需要繼續分解的3-節點,或者達到根(根變為3-節點)。

3.3.1.6分解根節點

如果從插入節點到根節點,一路都是3-節點,那麼根節點最後變為4-節點,這時要對根節點進行分解;

將根節點分解為3個2-節點,樹高加1;

3.3.1.7區域性變換

將4-節點分解為一顆2-3樹有6中情況:

1) 根節是3-節點

2) 父節點是2-節點,左鏈結指向4-節點

3) 父節點是2-節點,右鏈結指向4-節點

4) 父節點是3-節點,左鏈結指向4-節點

5) 父節點是3-節點,中鏈結指向4-節點

6) 父節點是3-節點,右鏈結指向4-節點

3.3.1.8全域性性質

上述區域性變換不影響樹的有序性和平衡性;

變換前根節點到所有空連線的路徑長度為h,變換後該長度仍然是h;

只有當根節點被分為3個2-節點時,所有空連線到根節點的路徑長度才會加1;

《演算法》 3 3平衡查詢樹(2)

2 3查詢樹的實現採用紅黑二叉樹的簡單資料結構來表達 用這樣的資料結構表達,量不大 3.3.1.1 紅黑二叉樹表達2 3查詢樹 由一條紅色左鏈結相連的裡那個2 節點表示乙個3 節點 黑鏈結是2 3樹中的普通鏈結 沒有任何乙個節點同時和兩條紅鏈結相連 紅鏈結均為左鏈結 該樹是完美黑色平衡樹,即任意空連...

平衡查詢樹

在前面我們說了二叉查詢樹,它在最壞的情況下是很糟糕的。下面我們來說一種查詢樹,這種這查詢樹能夠保證無論如何構造它,它的執行時間都是對數級別的。理想情況下我們希望能夠保持二分查詢樹的平衡性。在一棵含有n個結點的樹中,我們希望樹的高度為lgn,這樣我們就能保證所有查詢能在lgn次比較內結束,就和二分查詢...

演算法5 1 平衡查詢樹之二三樹

平衡查詢樹的目標是實現查詢 插入 刪除操作在最壞情況下的複雜度均為logn。本節將介紹二三查詢樹。二三樹中有兩種節點 二三查詢樹非常平衡,每個空節點到根節點的距離都是一樣的 在二三樹中查詢乙個鍵的時候有以下規則 根據查詢操作的規則,先定位到需要插入的節點。如果是二節點,那麼將二節點中增加乙個鍵成為三...