高い木、AVL木や赤、黒の木
バイナリツリートラバーサル予約注文/インオーダー/ポスト・オード
-
プリアンブル(予約注文):ルート - 左 - 右
-
(インオーダー)ために:左 - ルート - 右
-
- 右 - 左ルート:シーケンス(ポストオーダー)した後、
サンプルコード
def preorder(self, root):
if root:
self .traverse_path.append(root.val)
self .preorder(root.left)
self .preorder(root.right)
def inorder(self, root):
if root:
self .inorder(root.left)
self .traverse_path.append(root.val)
self .inorder(root.right)
def postorder(self, root):
if root:
self .postorder(root.left)
self .postorder(root.right)
self .traverse_path.append(root.val)
バイナリ検索ツリーのバイナリ検索ツリー
また、二分探索木として知られている二分探索木は、二分木(順序付きバイナリツリー)を命じ、(ソートバイナリツリー)バイナリツリーをソートし、以下の特性を有する空のツリーまたはバイナリツリーを指します。
- すべてのノードの左サブツリーの値は以下のルートの値以下です。
- 右サブツリーの全てのノードの値は、ルートの値よりも大きいです。
- ように:左と右のサブツリーも二分探索木です。(これは反復的です!)
予約限定:昇順
キー性能保証
-
2度を確保VV! - >左の部分木ノードバランス(再帰的に)
-
バランス
-
https://en.wikipedia.org/wiki/Selfbalancing_binary_search_tree
AVL木
-
本発明者らGMアデルソン-Velskyとエフゲニー・ランディス
-
バランスファクター(バランス係数):それは、その左部分木の高さを引いその右部分木(時には反対)の高さです。バランス係数= {-1、0、1}
-
回転操作により(4種類)残高に
-
https://en.wikipedia.org/wiki/Selfbalancing_binary_search_tree
回転操作
-
L
-
右回りの
-
周りのスピン
-
右L
サブツリー形式:右、右部分木 - >左
サブツリー形式: - >右利きまたはサブツリーので、
サブツリーフォーム:左と右のサブツリー - >スピン周り
サブツリーの形状:左右のサブツリー - >左右
概要
-
平衡二分探索木
-
各ノード預金残高率= {-1、0、1}
-
4つの回転操作
不十分:ノードは、追加情報を格納し、頻繁な数を調整する必要があります
赤黒木
赤黒木約平衡二分探索木(バイナリ検索ツリー)は、任意のノードの左と右のサブツリーの高さが2倍未満であることを確認することが可能です。具体的には、次の条件が満たされている赤黒木は、二分探索木です。
-
各ノードは、赤または黒であります
-
ルートノードは黒
-
各葉ノード(NILノード、空のノード)は黒です。
-
あなたは、隣接する2つの赤のノードを持つことはできません
-
任意のノードから各パスの全ての葉に黒のノードの同じ番号が含ま。
赤黒木
キープロパティ
長い可能な最短パスなどとして倍以上のルートからリーフまでの最長可能なパス。
コントラスト
-
彼らはより厳密にバランスされているので、AVL木が速く赤黒木より検索を提供しています。
-
赤黒木少ない回転が比較的リラックスしたバランスに行われてAVL木よりも早く挿抜操作を提供します。
-
AVL木は赤黒木は、ノード当たりの情報の1ビットのみを必要とするのに対し、このようにしてノード当たり整数のストレージを必要とする、各ノードとのバランス因子または高さを格納します。
-
赤黒木は、マップ、マルチマップ、AVL木が速く回収のが必要とされているデータベースで使用されているのに対し、multisetin C ++などの言語ライブラリのほとんどで使用されています。