我想扩充一个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方法。这是对的吗?
答案 0 :(得分:0)
这完全取决于您尝试使用扩充功能。通常,在扩充平衡二叉搜索树时,您需要在逻辑中插入额外的代码来执行
CLRS的“算法简介”教科书有一章关于增强二叉搜索树。虽然它们专注于红/黑树,但相同的一般策略应该适用于任何基于旋转的树平衡方案。
希望这有帮助!