不能正确旋转 - AVL Tree,JAVA

时间:2018-04-22 04:25:33

标签: java tree avl-tree

所以这是我的任务。

编写一个使用AVL树存储通用值和键的Java类。

方法

  • 构造
  • 列表项
  • 插入
  • 删除
  • 查找密钥值
  • InOrder - 返回一个数组按顺序排列的数组
  • PostOrder - 返回包含按顺序序列中的值的数组
  • PreOrder - 返回一个包含预订顺序值的数组
  • 使用包含Key和Value的内部节点类。
  • 对遍历返回的数组使用ArrayList。

我认为我有基本的想法但是我的树没有正确平衡。此外,inorder,preorder,postored正在工作中,在我实现ArrayList之前尝试确保正确排序。

任何帮助或修复都是巨大的。这是我到目前为止所拥有的。

set

1 个答案:

答案 0 :(得分:0)

也许这会对你有所帮助:

重新计算树的高度:

public void computeHeight() {
    height = 1;
    if (left != null) {
        height += left.height;
    }
    if (right != null) {
        height += right.height;
    }
}

返回平衡因子:

private int getBalance(){
    int balance = 0;
    if (left != null) {
        balance += left.height;
    }
    if (right != null) {
        balance -= right.height;
    }
    return balance;
}

平衡节点:

private Node balance() {
    computeHeight();
    int balance = getBalance();
    if (balance > 1) {
        if (left.getBalance() < 0) {
            left = left.rotateLeft();
        }
        return rotateRight();
    }else if (balance < -1) {
        if (right.getBalance() > 0) {
            right = right.rotateRight();
        }
        return rotateLeft();
    }
    return this;
}