web-dev-qa-db-ja.com

二分木と二分探索木の違い

誰でもどうぞ二分木二分探索木で?

306
Neel

二分木:各ノードが最大2枚の葉を持つ木

  1
 / \
2   3

二分探索木:検索に使用されます。左側の子が親ノードより小さい値を持つのみのノードを含み、右側の子のみがノードを含む二分木親以上の値を持つ。

  2
 / \
1   3
536
Mehrdad

バイナリツリーは、2人の子供(左の子供と右の子供)を持つ特殊な形式のツリーです。それは単に木構造のデータの表現です

バイナリサーチツリー(BST)は、次の条件に従う特別なタイプのバイナリツリーです。

  1. 左側の子ノードがその親ノードよりも小さい
  2. 右の子ノードがその親ノードより大きい
54
Jayzcode

二分木はノードからなり、各ノードは "左"ポインタ、 "右"ポインタ、およびデータ要素を含みます。 「ルート」ポインタは、ツリーの最上位ノードを指します。左右のポインタは、両側の小さい「サブツリー」を再帰的に指しています。 NULLポインタは、要素のない2分木、つまり空の木を表します。形式的な再帰定義は次のとおりです。二分木は空(nullポインタで表される)か、左右のポインタ(前方の再帰定義)がそれぞれ二分木を指す単一ノードで構成されます。

二分探索木(BST)または「順序付き二分木」は、ノードが順番に並んでいる二分木の一種です。左側のサブツリーの要素はノード(<)よりも小さく、右側のサブツリーの要素はすべてノード(>)よりも大きいです。

    5
   / \
  3   6 
 / \   \
1   4   9    

上に示したツリーは二分探索ツリーです。「ルート」ノードは5、その左側のサブツリーノード(1、3、4)は<5、右側のサブツリーノード(6、9)は> 5です。再帰的に、各部分木も二分探索木の制約に従わなければなりません。(1、3、4)部分木では、3が根、1 <3と4> 3です。

問題の正確な表現に注意してください - "二分探索木"は "二分木"とは異なります。

36
Emmanuel Oddy

上記の誰もが二分木と二分探索木の違いについて説明したように、私は与えられた二分木が二分探索木であるかどうかをテストする方法を追加しているだけです。

boolean b = new Sample().isBinarySearchTree(n1, Integer.MIN_VALUE, Integer.MAX_VALUE);
.......
.......
.......
public boolean isBinarySearchTree(TreeNode node, int min, int max)
{

    if(node == null)
    {
        return true;
    }

    boolean left = isBinarySearchTree(node.getLeft(), min, node.getValue());
    boolean right = isBinarySearchTree(node.getRight(), node.getValue(), max);

    return left && right && (node.getValue()<max) && (node.getValue()>=min);

}

お役に立てば幸いです。私はそれがここでこれを言及する価値があると感じたので私がトピックから逸​​れているなら申し訳ありません。

13
Trying

バイナリツリー データ構造を表します ノード で構成できます のみ have 2人の子供 references 。

二分探索木 _ bst _ )一方、 二分木 の特殊な形式です。各 ノード は匹敵する値、そして左に小さい値の子供、右に大きい値の子供。

したがって、すべての _ bst _ 二分木 ですが、 二分木 の一部だけが _ bst _ でも構いません。 _ bst _ バイナリツリー のサブセットであることを通知します。

したがって、 バイナリツリー は、 バイナリ検索ツリー よりも一般的なデータ構造です。また、 バイナリ検索ツリー sorted であることを通知する必要がありますが、一般的な バイナリツリー にはそのような規則はありません。

二分木

Binary Tree ではありません BST;

         5
       /   \
      /     \
     9       2
    / \     / \
  15   17  19  21

バイナリサーチツリー(ソートツリー)

二分探索木 これは 二分木でもある ;

         50
       /    \
      /      \
     25      75
    /  \    /  \
  20    30 70   80

「二分探索木ノード」プロパティー

また、 _ bst _ 内の任意の 親ノード についても通知します。

  • 左側のすべてのノードは、親ノードの値よりも小さい値を持ちます。上の例では、 すべて左側にある 左側の子孫 )である値{20、25、30}のノードは50より小さいです。

  • すべての正しいノードは、親ノードの値よりも大きい値を持ちます。上の例では、 すべて右側にある 右側の子孫 )の値が{70、75、80}のノードは50を超えています。

バイナリツリー Nodeにはそのような規則はありません。 バイナリツリー Nodeの唯一のルールは2人の子供を持つことなので、それがなぜ binary と呼ばれるかを自己説明します。

10

二分探索木は特別な種類の二分木で、次の特性を示します。任意のノードnに対して、nの左側のサブツリーのすべての子孫ノードの値はnの値より小さく、右側のサブツリーのすべての子孫ノードの値はnの値より大きい。

10
Kaushik Lele

二分木

二分木はanythingであり、2人の子供と1人の親を持ちます。リンクリストまたは配列として、あるいはカスタムAPIを使って実装できます。もっと具体的なルールを追加し始めると、more専門のツリーになります。最も一般的な既知の実装は、左側に小さいノードを、右側に大きいノードを追加することです。

たとえば、サイズが9で高さが3で、値が2のルートノードを持つラベル付きのバイナリツリー。ツリーはアンバランスでソートはされていませんhttps://en.wikipedia.org/wiki/Binary_tree

enter image description here

たとえば、左側のツリーでは、Aに6人の子{B、C、D、E、F、G}がいます。それは右側の二分木に変換することができます。

enter image description here

バイナリ検索

二分検索は、ノードチェーン上の特定の項目を見つけるために使用される手法/アルゴリズムです。ソートされた配列に対して二分検索が機能します

二分探索は、ターゲット値を配列の中央の要素と比較します。それらが等しくない場合、ターゲットが嘘をつくことができない半分は排除され、それが成功するか残りの半分が空になるまで残りの半分で検索が続けられます。 https://en.wikipedia.org/wiki/Binary_search_algorithm

enter image description here

二分探索を表すツリー。ここで検索されている配列は[20、30、40、50、90、100]で、目標値は40です。

enter image description here

二分探索木

これは二分木の実装の一つです。これはsearchingに特化しています。

二分探索木およびB木データ構造は、二分探索に基づいています。

バイナリー検索ツリー(BST)は、順序付きまたはソート済みバイナリーツリーとも呼ばれ、特定のタイプのコンテナー:「項目」を格納するデータ構造(数字、名前など)メモリー内にあります。 https://en.wikipedia.org/wiki/Binary_search_tree

サイズ9、深さ3で、根が8の二分探索木。葉は描かれていません。

enter image description here

そして最後に、よく知られたデータ構造と適用されたアルゴリズムの性能比較のための素晴らしいスキーマ

enter image description here

アルゴリズム(第4版) からの画像

5
Teoman shipahi

二分木とは、子が二人以上になることのない木です。二分探索木は、左の子がルートノードのキーよりも小さい値を持ち、右の子がルートノードのキーよりも大きい値を持つという不変式に従います。

4
nana yaah
  • 二分探索木:二分木上でインオーダートラバーサルが行われると、挿入された項目のソート値が得られます。
  • 二分木:どのような種類のトラバースでもソート順は見られない
4
AlienOnEarth

与えられた二分木が二分探索木であるかどうかを調べるには、ここでは代替アプローチです。

トラバースツリーインインオーダーファッション(つまり左チャイルド - >親 - >右チャイルド)、トラバースノードデータを一時変数に格納するとtemptempに格納する直前、現在のノードのデータがそれより高いかどうかを確認前のものかどうか。それからちょうどbreakしてください、TreeはBinary Search Treeではありません、そうでなければ最後までトラバースします。

以下はJavaの例です。

public static boolean isBinarySearchTree(Tree root)
{
    if(root==null)
        return false;

    isBinarySearchTree(root.left);
    if(tree.data<temp)
        return false;
    else
        temp=tree.data;
    isBinarySearchTree(root.right);
    return true;
}

一時変数を外部に維持

3
Neeraj Jain

二分探索木では、すべてのノードは特定の順序で並べられます - ルートノードの左側にあるノードはそのルートよりも小さい値を持ち、ノードの右側にあるすべてのノードはの値よりも大きい値を持ちます。ルート。

1
Spencer Cheng

ツリーは、いずれかのノードの子の最大数が2である場合に限り、バイナリツリーとして呼び出すことができます。

ツリーは、いずれかのノードの子の最大数が2で、左側の子が常に右側の子よりも小さい場合に限り、バイナリ検索ツリーとして呼び出すことができます。

0
jith912