非再帰後、順番にBSTの場合:ガイドラインは、何かを学んでいませんか??
このAVL木の回転はこの事実logN個である理由については、私は知りません。
ここを見て:基礎となるストレージ構造AVL木は言っているのではない:ないBSTツリーが、同じ方法であること:ストレージルートやサイズ、理由:同じではない、それを削除して、操作を追加し、一般的なBST。
それは技術的な詳細を学び、何とか文言AVL木に最終的には長い時間がかかった、と:
学ぶためにコースを考えます:
このライブラリーが構築される1.Math、その上に直接使用する数学は、どのようなライブラリのインポートを取ることはありません
2. ノードは、このフィールドに高さを追加する必要の場合は、これが最後に見ていることはどのくらいの高さ、最大高、高いルートです。
3.heightは、高さが高い場合、レベルと高さ、より高いアップを表します。この目的は、ノードが導入される:に移動検出左右サブツリーの間の深さの差、すなわち平衡状態か否か、1よりも大きいです。場合は1より大きく、それはアンバランスであると同定されます。
4。
これは、前順が小さいから大規模までかどうかを確認した後、ある関数の二分探索木、かどうかを決定することです。
大量の注文に非小ならば、それは二分探索木ではありません。
再帰的なツリーまたは5.、把握する必要があるような関数が定義されているもの、あなたはこの機能があるから返された値を取得するために必要なもの?
戻り値:ルートの高さは?またはサブ根付いた木の高さ。
特別な場合を6、およそ自身の区別、時々 、輸出は異なる、時には輸出、同じ意味であり、輸出は区別するために。
公共int型のgetHeight(ノードノード)//高さの定義の、樹高のルートノードへの復帰
//キー:リターンは、現在のノードが、またはリターンが木の高さに基づいていることのルートノードであることは明らかでなければならない
{
IFは(ノード== NULL)//実際には、言うことを除いて、私はここで見てみましょう:特殊なケースとして、実際には、輸出は特別な事情との感覚の一つであり
、戻り0; //空の木の高さではない
他の
{
リターンMath.max(のgetHeight( node.left)のgetHeight(node.right))+ 1;
}
}
何コンテナ下7.ませ物は、追加のいくつかのような削除を書かれています。
バランス係数の8概念:左部分木の高さは右部分木マイナスの高さ。。キー:高さマイナス左部分木の右部分木と言って
それがされ、あなたを伝えるために、権利を減算する左:左と右のサブツリーは、1以上によって異なります。
9。
それについてバランス:特定し、この位置の機能は書く方法を知っているより多くのことが可能です。
機能の位置決め:ノードでは平衡ツリー根ざしています
それは言うことです: ツリーが空の場合、バランス。現在は、(ここで使用するバランス係数の概念に)バランスされている場合は、サブツリーがバランスされていない見に行きます
電流がバランスされていない場合は、直接のリターンが間違っています。
10。
D-意味
まず、図外:偏っ意味かそこら(LL)
まず、意味LL、RRの意味を見つける2行目の前で言います。それが最後に到達すると、2つのサブツリーを追加
他の二つの場合、それはまた、その相補構造を発見します。図F及びG 2は補数であるようです
左利き、右利きの意味については、それは次のようになりますため、ルートノード、利き手。
実際には、それがコンセプトとLLのRRに対応しています。(L平均反時計回り、右回り手段時計回り)
この手段は、その:
注意:この位置ではT1、T2、短い成長が、それは、レベル1でなければなりません。しかし、高さがない場所でのことで、決定子の高さにより、ツリーでそのサブツリーの数によって決定されます。
理由:xとyが落ちる可能性がある場合しかし、t1とt2が空の場合は空である場合、Yはその後低下しました。
T3、T4が必要な場合は空でない場合、xが実際にyの衰退とそれを減少しますか?
実際には、可能性が低いです。
言い換えれば、回転した後、高さを調整するために覚えて、高さ調整は非常に重要です。
事実サブツリーポインタ変更、xとyの回転点を変更します。
11。
ここで言葉を覚えておいて、ちょうど呼び出し、他のことをしません。
理由:高さを変更するために、私たちが完了した後に変更にスポットを追加する必要があります。したがって、その固有の関数呼び出しの高さの変化を達成するために
むしろより外側が何かをするために、このインターフェイスを呼び出していること。
12。
、実際にはこれは空で、ロジックを追加し、両方の特殊なケースでなく、条件をエクスポート
そのサブツリーの上に追加した後、その高さを変更するには、このノードのために
それこの事の高さの変化は非常に重要です。
タイミング論理選択の回転のための13:
キー:平均:1よりも大きいため、または-1未満、次いで不均衡が記載点。
だからそれが残っている場合よりも小さいか(0に等しい等しいがOKであることを覚えているゼロに等しいです)
あなただけがルート不均衡知っておく必要があります条件に達した、と知ることができ不均衡それぞれの方向が(同じ方向を0に等しいと考えることができる)同じ方向です。
ここで言った:知る必要 サブツリーのルートの方向が逆方向で、逆は0以上でなければなりません
あなたは化学物質を細かくすることができます。
私は回転させるように選択しなければならないときに知っていました。
第一の回転の下、答えを得るし、その後さらに上。
ダブル回転、我々は必要下、その後、上部の回転に回転させます。
size--場合、最初の書き込みに間違いなく、ここで、その後returnNodeを保存します。
で削除インタフェースは、外size--の理由を記述していない:私は他のことをしない、インターフェースはそれだけを呼び出します取り除きます。
次の空のために、そしてまた、最小のノードを見つけていなくても周りのため、それをsize--、そのサブツリーが空です。
外側には、それはreturnNodeが空であるかどうかを確認するためにreturnNodeの必要性ですので、直接リターン
そして、高さを削除した後にロジックを変更するには、この事の高さの変化はなく、外側にはあります。
次いで、外側回転におけるロジックがある場合。
言い換えれば、フィールド、新たに追加されたノードでは、様々な操作は、それがどのようにこの新しい分野に影響を与えるだろう、我々は検討する必要があります
以下のためには、削除再帰的、再帰的に増加しました。その子ノードの対応する部分が処理された後のために、このノードにもする必要がある高さおよびその他の動作の変化。
変更子ノード または注意するノード、再帰的なリターンのために必要な、ノードの高さを、また、処理されます。
現在のサブプロセスを処理した後
再帰的な結果が返されるためつまり、この物質の高さは、返された結果の高さの変化の再帰的な性質を変更する方法。それは通過です:現在のノードを解決するために、子ノードを解決するために、治療を完了した後。
そして、: 導入returnNodeは、まず、それは価値が学習され、現在の結果を保存します。
AVL木は終了している、と私の内側に間違ったロジックも改訂されました。
マップを実現するためのAVL木の場合は、通話機能のみが、実際には、言うまでもなく設定し達成。AVLは、基礎となるストレージの構造を取るよう。
実際には、それはここだけでなく、同じ論理和を設定し、マッピングされています。唯一の鍵の追加、キーと値を追加するために設定されたマップであります
AVLツリー・オブジェクトを導入:、logN個を有する最悪のケースを防ぐ発生直線状に分解することがないために