对于我的 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 树插入时间复杂度是O(log n),我认为这种方法会影响这个时间复杂度。可以做些什么来修改它?