私の 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 Tree Insert の時間計算量はO(log n)であるため、この方法はこの時間計算量に影響を与えると思います。それを修正するために何ができますか?