「完全二分木」、「厳密二分木」、「完全二分木」の違いは?


80

私は下の木の用語について混乱していて、私は木を研究していて、これらの木を区別することができません:

a)完全な二分木

b)厳密な二分木

c)完全な二分木

これらの木を区別するのを手伝ってください。これらのツリーはデータ構造でいつどこで使用されますか?



7
いいえ、そうではありません、これらの間で多くの混乱
kTiwari 2012

1
厳密な
二分

回答:


73

ウィキペディアは

完全な二分木(適切な二分木、2木、または厳密に二分木)は、葉以外のすべてのノードに2つの子があるツリーです。

したがって、子が1つしかないノードはありません。厳密な二分木と同じように見えます。

これはグーグルからの完全/厳密な二分木の画像です:

ここに画像の説明を入力してください

完全な二分木は、おそらく最後のレベルを除くすべてのレベルが完全に満たされ、すべてのノードが可能な限り左にある二分木です。

バランスの取れた木を意味しているようです。

これはグーグルからの完全な二分木の画像です、画像の完全なツリー部分はボーナスです。

ここに画像の説明を入力してください


34
あなたの完全なツリーの例は、完全な二分木であるという基準も満たしているため、違いは明らかにぼやけています。私の意見では、完全な二分木ではない完全なツリーの例を挙げたいと思うかもしれません。逆もまた同様です。回答完了:)
0decimal0 2014

1
完全な二分木と厳密に二分木には違いがあります。答えを参照してください:stackoverflow.com/a/32064101/5237727
Saurabh Bhatia 2017年

2
また、すべての完全なツリーはバランスの取れたツリーですが、すべてのバランスの取れたツリーは必ずしも完全なツリーであるとは限りません。
sfarbota 2017

1
すべてのレベルが完全に満たされているとはどういう意味ですか?
lolololol ol 2017

2
@lolololololは、そのレベルにある可能性のあるすべてのノードが存在することを意味します。
サム私はモニカを復活させると言います2017

87

パーフェクトツリー:

       x
     /   \
    /     \
   x       x
  / \     / \
 x   x   x   x
/ \ / \ / \ / \
x x x x x x x x

完全なツリー:

       x
     /   \
    /     \
   x       x
  / \     / \
 x   x   x   x
/ \ /
x x x

厳密/フルツリー:

       x
     /   \
    /     \
   x       x
  / \ 
 x   x 
    / \
    x x 

4
完全な二分木とは、OPによって参照される完全な二分木を意味しますか?
RBT 2017年

3
完全な二分木は、厳密/完全な二分木と完全な二分木の両方ですが、その逆も常に正しいとは限りません。
ネオ

51

STRICTとFULLBINARYTREEには違いがあります。

1)フルバイナリツリー正確に(2 ^ h)-1個の要素を含む高さhのバイナリツリーは、フルバイナリツリーと呼ばれます。(参照:Pg 427、C ++のデータ構造、アルゴリズム、およびアプリケーション[University Press]、Sartaj Sahniによる第2版)。

または言い換えれば

FULL BINARY TREEでは、各ノードには正確に0または2つの子があり、すべてのリーフノードは同じレベルにあります。

例:以下はフルバイナリツリーです。

          18
       /      \   
     15       30    
    /  \     /   \   
  40    50  100  40 

2)厳密な二分木:各ノードには正確に0または2つの子があります。

例:以下はSTRICT BINARYTREEです。

         18
       /     \   
     15       30    
    /  \          
  40    50

完全な二分木の定義に混乱はないと思いますが、それでも投稿の完全性のために、完全な二分木とは何かを伝えたいと思います。

3)完全な二分おそらく最後のレベルを除いてすべてのレベルが完全に満たされ、最後のレベルに可能な限りすべてのキーが残っている場合、二分木は完全な二分木です。

例:以下は完全な二分木です:

           18
       /       \  
     15         30  
    /  \        /  \
  40    50    100   40
 /  \   /
8   7  9 

注:以下も完全な二分木です。

         18
       /     \   
     15       30    
    /  \     /   \   
  40    50  100  40 

完全な二分木の定義のソースを提供できますか?これは、NISTに提供されているウィキペディアのものと矛盾します。
Calvin Li

@CalvinLiソースは、FULL BINARYTREEの定義に記載されています。-ここではPDFファイル(PDFファイルのPG 447)のリンクであるo6ucs.files.wordpress.com/2012/10/...は
Saurabhバティア

@SaurabhBhatia、最後の表現は完全な二分木にも当てはまります。私が間違っている場合は私を訂正してください。どのようにして1つの表現が異なる品種に当てはまるのでしょうか?
ローズ

10

免責事項-いくつかの定義の主な情報源はウィキペディアです。私の答えを改善するための提案は大歓迎です。

この投稿には受け入れられた答えがあり、良いものですが、私はまだ混乱していたので、これらの用語の違いについてもう少し説明を加えたいと思います。

(1)完全なバイナリTREE- A完全なバイナリツリーは、葉以外の各ノードは、2つのchildren.Thisも呼ばれていた二分木であり、厳密に二分木

ここに画像の説明を入力してください ここに画像の説明を入力してください

上記の2つは、完全または厳密に2分木の例です。

(2)完全二分TREE-ここでは、完全二分木の定義は非常に曖昧であり、それは述べて: -完全なバイナリツリー内の各レベルの二分木であり、おそらく最後に除く外、完全に充填され、すべてのノードがとおりであります可能な限り左に。最後のレベルhで、可能な限り左に1〜2時間のノードを持つことができます。

イタリック体の線に注意してください。

あいまいさはイタリック体の行にあり、「おそらく最後を除いて」、これは最後のレベルも完全に満たされる可能性があることを意味します。つまり、この例外は常に満たされる必要はありません。例外が当てはまらない場合は、私が投稿した2番目の画像とまったく同じです。これは、完全な二分木とも呼ばれます。したがって、完全な二分木も完全で完全ですが、その逆はありません。これは、もう1つの定義で明確になります。

BINARY TREE-ほぼ完了し、完全なバイナリツリーの定義における例外は、それがほぼ完全二分木またはほぼ完全なバイナリツリーと呼ばれる保持しているとき。それ自体は完全な二分木の一種ですが、より明確にするために別の定義が必要です。

したがって、ほぼ完全な二分木は次のようになります。画像では、ノードが可能な限り左にあることがわかります。つまり、完全な二分木のサブセットのようになります。つまり、ほぼ完全な二分木はすべて完全な二分木です。ツリーですが、その逆はありません。:

ここに画像の説明を入力してください


6

上記の回答から結論として、完全/厳密、完全、完全な二分木の正確な違いは次のとおりです。

  1. 完全/厳密に二分木:-リーフノードを除くすべてのノードには2つの子があります

  2. 完全な二分木:-最後のレベルを除くすべてのレベルが完全に満たされ、すべてのノードが左揃えになります。

  3. 完全な二分木:-リーフノードを除くすべてのノードには2つの子があり、すべてのレベル(最後のレベルも)が完全に満たされています。


2

ノードがツリー形式で描画される二分木について考えてみます。次に、ノードに上から下、左から右に番号を付け始めます。完全なツリーには、次のプロパティがあります。

nに子がある場合、n未満の番号が付けられたすべてのノードには2つの子があります。

nに1つの子がある場合、それは左の子である必要があり、n未満のすべてのノードには2つの子があります。さらに、nより大きい番号のノードには子がありません。

nに子がない場合、nより大きい番号のノードには子がありません。

完全な二分木を使用して、ヒープを表すことができます。ギャップのない連続したメモリで簡単に表すことができます(つまり、最後に存在する可能性のあるスペースを除いて、すべての配列要素が使用されます)。


2

完全な二分木は完全な二分木ですが、逆にすることはできません。二分木の深さがnの場合はありません。完全な二分木のノードの数は(2 ^ n-1)です。二分木では子が2つある必要はありませんが、完全二分木ではすべてのノードに子がないか2つあります。


1
「逆は不可能」と厳密に言うことはできません。実際、受け入れられた回答の完全なツリーの例では、この仮定が無視されています...むしろ、可能かもしれないし、不可能かもしれないと言うべきです
0decimal0 2014

1
バイナリの深さがnの場合、いいえ。完全な二分木のノードの数は(2 ^ n-1)ですが、完全な二分木の定義は、すべてのノードがリーフであるか、2つの子を持つツリーです。したがって、可能な最大数はありません。子供の数は(2 ^ n-1)ですが、それより少ない場合があります。
mrida 2014

2

基本から始めるには、二分木自体を理解して、さまざまな種類の二分木を理解することが非常に重要です。

次の場合に限り、ツリーは二分木です:-

–ルートノードがあり、子ノードがない場合があります(0子ノード、NULLツリー)

–ルートノードには、1つまたは2つの子ノードがあります。このような各ノードは、バイナリツリー自体を形成します 

–子ノードの数は0、1、2 ....... 2以下にすることができます

–ルートから他のすべてのノードへの一意のパスがあります

例:

        X
      /    \
     X      X
          /   \
         X     X

お問い合わせの用語について:

二分木は、次の場合に限り、完全な二分木です(高さh、ルートノードを0とします)。

レベル0からh-1は、高さh-1の完全な二分木を表します。

–レベルh-1の1つ以上のノードには、0個または1個の子ノードがあります。

j、kがレベルh-1のノードである場合、jがkの左側にある場合に限り、jはkよりも多くの子ノードを持ちます。つまり、最後のレベル(h)でリーフノードが欠落している可能性がありますが、存在するノードは左にシフトします

例:

                          X
                     /          \
                   /              \
                 /                  \
                X                    X
             /     \              /     \
           X       X             X       X
         /   \   /   \         /   \    /  \ 
        X    X   X   X        X    X    X   X 

二分木は、次の場合に限り、厳密に二分木です:-

各ノードには正確に2つの子ノードがあるか、ノードがありません

例:

         X
       /   \
      X     X 
          /   \
         X      X
        / \    / \ 
       X   X  X   X 

二分木は、次の場合に限り、完全な二分木です:-

各非リーフノードには、正確に2つの子ノードがあります

すべてのリーフノードは同じレベルにあります

例:

                          X
                     /          \
                   /              \
                 /                  \
                X                    X
             /     \              /     \
           X       X             X       X
         /   \   /   \         /   \    /  \ 
        X    X   X   X        X    X    X   X 
      /  \  / \ / \ / \      / \  / \  / \ / \ 
     X   X X  X X X X X     X  X  X X  X X X X 

また、完璧な二分木とは何かを知っておく必要がありますか?

二分木は、次の場合に限り、完全な二分木です:-

–は完全な二分木です

–すべてのリーフノードは同じレベルにあります

例:

                          X
                     /          \
                   /              \
                 /                  \
                X                    X
             /     \              /     \
           X       X             X       X
         /   \   /   \         /   \    /  \ 
        X    X   X   X        X    X    X   X 
      /  \  / \ / \ / \      / \  / \  / \ / \ 
     X   X X  X X X X X     X  X  X X  X X X X 

さて、評判が悪いので画像を投稿できず申し訳ありません。これがあなたや他の人に役立つことを願っています!


2

二分木の限られた経験では、私は次のように思います。

  1. 厳密に二分木:リーフノードを除くすべてのノードに2つの子があるか、ルートノードのみがあります。
  2. 完全な二分木:2 ^(H + 1)-1ノードを厳密に(または正確に)含むHの二分木。どのレベルに最も多くのノードがあるかは明らかです。または、要するに、すべてのリーフノードが同じレベルにある厳密な二分木です。
  3. 完全な二分木:これは、おそらく最後のレベルを除くすべてのレベルが完全に満たされ、すべてのノードが可能な限り左にある二分木です。

1
あなたは完全な二分木の定義が正しくありません、それは完全な二分木の定義です。完全な二分木は、厳密に二分木と同義です。(ソース:厳密にバイナリツリーを参照してください。faculty.cs.niu.edu/~mcmahon/CS241/Notes/bintree.html)(ソース:完璧なバイナリツリーを参照してください。slideshare.net/ajaykumarc137151/...を
Keego

1
ああ、私の神、私は今混乱しています、私はこれを確認します。どうもありがとう。
BertKing 2017

1
問題ありません:)以下の@Lotusによる回答を参照してください、彼はそれを釘付けにしました。これを反映するために、あなたの答えを編集することをお勧めします。
Keego 2017

1

高さ「h」の二分木を考えてみましょう。二分木は、すべての葉が高さ「h」または「h-1」に存在し、シーケンスに番号が欠落していない場合、完全な二分木と呼ばれます。

                   1
                 /   \
              2       3
            /    \         
         4        5

それは完全な二分木です。

                   1
                 /   \
              2       3
            /        /    
         4         6    

シーケンスに5番のノードがないため、完全な二分木ではありません。


0

すべてのノードに0または2の子がある場合、完全な二分木はいっぱいです。リーフノードの完全なバイナリ数は、内部ノードの数に1を加えたものですL = l + 1


0

完全な二分木:最下位レベルとすべてのリーフ要素が子を残している必要がある1つの主要なものを除いて、すべてのレベルが完全に満たされています。厳密な二分木:このツリーでは、すべての非リーフノードに子がありません。つまり、左にも右にもありません。完全な二分木:すべてのノードには、ゼロの子または2つの子があります(単一の子はありません)。


>このツリーでは、すべての非リーフノードに子がありません。つまり、左にも右にも子がありません。非リーフノードには少なくとも1
つの子が必要
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.