Java AVL树的对数条件

Java AVL树的对数条件,java,data-structures,avl-tree,Java,Data Structures,Avl Tree,对于我的AVL树实现,我有一个节点,它有一个左、右和父指针,以及一个平衡变量。每次插入新节点并执行所需旋转时,我都会通过从左子树中减去右子树来更新平衡。这个有问题的方法递归地调用自己来计算高度 有关方法: private int getHeight(Node nd){ if (nd != null){ if (nd.getLeft() == null && nd.getRight() == null) return 0;

对于我的AVL树实现,我有一个节点,它有一个左、右和父指针,以及一个平衡变量。每次插入新节点并执行所需旋转时,我都会通过从左子树中减去右子树来更新平衡。这个有问题的方法递归地调用自己来计算高度

有关方法:

private int getHeight(Node nd){
    if (nd != null){
        if (nd.getLeft() == null && nd.getRight() == null)
            return 0;
        else if (nd.getLeft() == null)
            return getHeight(nd.getRight()) + 1;
        else if (nd.getRight() == null)
            return getHeight(nd.getLeft()) + 1;
        else
            return Math.max(getHeight(nd.getLeft()), getHeight(nd.getRight())) + 1;
    }
    else return -1;
}

我的问题是,由于AVL树插入的时间复杂度是,我认为这个方法会影响这个时间复杂度。如何修改它?

提示:您不需要高度来计算新的平衡。节点及其左右子节点的旧平衡值就足够了

提示:计算新平衡不需要高度。节点及其左右子节点的旧平衡值就足够了

你不需要这个高度。你可以通过了解旧的平衡来保持平衡。这就是说,如果你还没有写,你可能需要调整你的旋转,这样你就可以在每次“移动”时保持平衡。你不需要高度。你可以通过了解旧的平衡来保持平衡。也就是说,如果尚未编写旋转,您可能需要调整旋转,以便在每次“移动”时保持平衡更新。

您不需要计算每次插入中所有节点的平衡因子

您只需要计算插入节点的父节点,以及它们的父节点,同时使用Balance 2或-2到达节点,然后旋转它们


如果您不知道如何以这种方式旋转主题(哪种旋转方式合适),请通知我

您不需要计算每次插入中所有节点的平衡因子

您只需要计算插入节点的父节点,以及它们的父节点,同时使用Balance 2或-2到达节点,然后旋转它们

如果您不知道如何以这种方式旋转主题(哪种旋转方式合适),请通知我