:
平衡二分木は、最小の可能な最大の高さ(別名 を有します葉ノードについては、任意の与えられた数の葉ノードについて、 が可能な最大の高さに配置されるため、
一つの一般的なバランスのとれたツリー構造は、各ノードの左及び右サブツリーは例えばもはや
1より
によって高さが異なる た二分木構造である:
これはバランスの取れた木。
そして、我々は1
を挿入した場合には、1だけ高さが高くなるのですけれども、それは再び均衡ツリーです。左と右のサブツリーはせいぜい1
ところで
高さが異なるため、AVLツリーは、自己均衡二分探索木ではありません。挿入後にバランスを失うことはできません。なぜなら、挿入するたびに、ツリーは必要な回転を行うことでバランスをとるからです。
という用語を使用すると、という用語が間違っていると思います。高さの差がないようにバランスがとれていると考えていますが、高さの差は1以下です。
質問:AVL木挿入の標準的なプロセスで
、それが(なぜなら挿入及び回転動作の)一つのサブツリーの高さの増加は、サブツリーしばらく(高さの後に、可能です1つ増える)、左右の子供の高さは同じですか?
我々は左と右の枝から同じ高さを持っており、我々は左の枝の葉ノードにノードを挿入する場合は、ツリーの高さはmaximum(height(left_branch, right_branch))
あるので、高さは、増加するツリーを持つことになります。この操作の後、height(left_branch)
はheight(right_branch)+1
に等しいためです。だから、彼らは平等ではありません。要するに
、あなたの前提条件はheight(left_branch) == height(right_branch)
あなたの操作はそうheight(left_branch) == height(right_branch)
条件がもはや真であることはできませんincreasing height of left_branch by 1
です。
具体的なことができますか? – ferit
@ Saibot、AVLツリーの参照を追加します。バランス(左/右)の子供が同じ高さを維持しながら、ツリーが1だけ増加することは不可能だと思います。しかし、私は間違っている可能性がありますので、アドバイスをしてください。まだ私の質問が明確でない場合は、どの部分がわからないのか教えてください。ありがとう。 :) –
(短い答え:できません。より大きなサブツリーの高さが増え、元の高さのサブツリーが得られた場合は、回転が使用されます。 )_ ...のように、関係するノードとツリーの名前を定義してください。一つのノード_a _ <_ _の両方で、高さの前条件と事後条件を挿入することができます。 – greybeard