Java AVL树的对数条件
对于我的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;
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到达节点,然后旋转它们 如果您不知道如何以这种方式旋转主题(哪种旋转方式合适),请通知我