[英]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.