簡體   English   中英

如何擴充AVL樹?

[英]How to augment an AVL tree?

我想增加一個avl樹來向每個節點添加額外的屬性,例如它包含的節點數(即在其子樹中)。

從這里的該avl Java實現代碼中http://www.blackbam.at/blackbams-blog/2012/05/04/avl-tree-implementation-in-java/我想向其中添加某些代碼,以便每個節點將包含一個size元素。

在AvlNode類中,我將其更改為:

/** Here is the AVL-Node class for Completenesse **/
public class AvlNode {
     public AvlNode left;
     public AvlNode right;
     public AvlNode parent;
     public int key;
     public int balance;
     public int size;

     public AvlNode(int k) {
          left = right = parent = null;
          balance = 0;
          key = k;
          size = 1;
     }
     public String toString() {
         return "" + key;
     }
}

但是現在對於AvlTree類,在插入和刪除操作期間,我實際在哪里添加代碼以更新節點的大小值。 我認為這是rotateleft和rotateright方法。 這是正確的嗎?

這完全取決於您要對增強進行的操作。 通常,當擴充平衡的二叉搜索樹時,您需要在邏輯中插入額外的代碼來執行

  • 插入,這些更改會更改某些子樹的數量/內容,
  • 刪除,從子樹中刪除元素,以及
  • 樹旋轉,可在不同子樹之間移動節點。

CLRS的“算法簡介”教科書中有一章是關於增強型二進制搜索樹的。 盡管它們專注於紅色/黑色樹,但相同的常規策略應適用於任何基於旋轉的樹平衡方案。

希望這可以幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM