まず、次のことを理解します。 二分木 そして 二分探索木 次に、二分木と二分探索木の違いを見ていきます。
二分木とは何ですか?
あ 二分木 です
バイナリ ツリーは次のように表すことができます。
上の図では、各ノードに最大 2 つの子が含まれていることがわかります。どのノードにも左または右の子が含まれていない場合、その子に関するポインタの値は NULL になります。
バイナリ ツリーで使用される基本用語は次のとおりです。
Javaハッシュマップ
バイナリ ツリーには、 完璧な二分木 。それは すべての内部ノードに 2 つのノードが含まれ、すべてのリーフ ノードが同じ深さである必要があるツリー。完全な二分木の場合、二分木に存在するノードの総数は次の式を使用して計算できます。
n = 2m+1-1
DFS vs BFS
ここで、n はノードの数、m はノードの深さです。
二分探索木とは何ですか?
あ 二分探索木 は要素を配置するために何らかの順序に従っているツリーですが、バイナリ ツリーはいかなる順序にも従いません。二分探索木では、左側のノードの値は親ノードより小さく、右側のノードの値は親ノードより大きくなければなりません。
例を通して二分探索木の概念を理解しましょう。
上の図では、ルート ノードの値が 15 であり、左側のサブツリー内のすべてのノードの値よりも大きいことがわかります。ルート ノードの値は、右サブツリー内のすべてのノードの値よりも小さくなります。次に、ルート ノードの左の子に移動します。 10 は 8 より大きく 12 より小さいです。また、二分探索木の特性も満たします。ここで、ルート ノードの右の子に移動します。値 20 は 17 より大きく 25 より小さい。また、二分探索木の性質も満たします。したがって、上に示した木は二分探索木であると言えます。
ここで、上記の二分木で 12 の値を 16 に変更した場合、それがまだ二分探索木であるかどうかを調べなければなりません。
ルート ノードの値は 15 であり、10 より大きく 16 より小さいため、二分探索木の特性を満たしていません。したがって、これは二分探索木ではありません。
Cで配列の長さを取得する
二分探索木の操作
二分探索ツリー上で挿入、削除、検索操作を実行できます。二分探索で検索がどのように実行されるかを理解しましょう。検索操作を実行する必要があるバイナリ ツリーを以下に示します。
上記の二分木で 10 を検索する必要があるとします。二分探索を実行するには、ソートされた配列内のすべての整数を考慮します。まず、検索スペース内に完全なリストを作成します。これにより、すべての数値が検索スペース内に存在します。検索スペースは 2 つのポインター、つまり開始と終了によってマークされます。上記の二分木の配列は次のように表すことができます。
まず、中央の要素を計算し、中央の要素と検索対象の要素を比較します。中央の要素は n/2 を使用して計算されます。 n の値は 7 です。したがって、中央の要素は 15 です。中央の要素は、検索された要素、つまり 10 と等しくありません。
注: 検索対象の要素が中間要素よりも小さい場合、検索は左半分で実行されます。それ以外の場合、検索は右半分で行われます。等しい場合、要素が見つかります。
検索対象の要素がmid要素よりも小さいため、左側の配列に対して検索が実行されます。以下に示すように、検索は半分に減りました。
左側の配列の Mid 要素は 10 で、検索された要素と同じです。
時間計算量
二分探索では、要素は n 個あります。中央の要素が検索された要素と等しくない場合、検索スペースは n/2 に削減され、要素が見つかるまで検索スペースを n/2 ずつ削減し続けます。全体のリダクションでは、n から n/2、n/4 などに移動すると、log がかかります。2n ステップ。
二分木と二分探索木の違い
CSV Javaから読み取る
比較の根拠 | 二分木 | 二分探索木 |
---|---|---|
意味 | バイナリ ツリーは、ノードが最大 2 つの子を持つことができる非線形データ構造です。つまり、ノードは 0、1、または最大 2 つの子を持つことができます。二分探索木は、ある順序に従ってツリー内のノードを編成する順序付き二分木です。 | |
構造 | バイナリ ツリーの構造では、最初のノードまたは最上位のノードがルート ノードと呼ばれます。バイナリ ツリー内の各ノードには、左ポインタと右ポインタが含まれます。左ポインタには左サブツリーのアドレスが含まれ、右ポインタには右サブツリーのアドレスが含まれます。 | 二分探索木は、左側のサブツリーのすべてのノードの値がルート ノード以下で、右側のサブツリーのすべてのノードの値がルート ノード以上である二分木のタイプの 1 つです。ルートノードの値。 |
オペレーション | バイナリ ツリーで実装できる操作は、挿入、削除、および走査です。 | バイナリ検索ツリーは、高速な挿入、削除、検索を提供するソートされたバイナリ ツリーです。すべてのキーがソート順に配置されるため、ルックアップでは主に二分検索が実装されます。 |
種類 | バイナリ ツリーには、完全バイナリ ツリー、完全バイナリ ツリー、完全バイナリ ツリー、および拡張バイナリ ツリーの 4 種類があります。 | 二分探索ツリーには、AVL ツリー、Splay ツリー、Tango ツリーなど、さまざまな種類があります。 |