如何增加AVL树?

时间:2013-02-06 23:26:41

标签: java data-structures 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方法。这是对的吗?

1 个答案:

答案 0 :(得分:0)

这完全取决于您尝试使用扩充功能。通常,在扩充平衡二叉搜索树时,您需要在逻辑中插入额外的代码来执行

  • 插入,更改某些子树的数量/内容,
  • 从子树中删除元素的删除,
  • 树旋转,它将节点移动到不同的子树上。

CLRS的“算法简介”教科书有一章关于增强二叉搜索树。虽然它们专注于红/黑树,但相同的一般策略应该适用于任何基于旋转的树平衡方案。

希望这有帮助!