私は下の木の用語について混乱しています、私は木を研究してきました、そして私はこれらの木を区別することができません:
a)完全な二分木
b)厳密な二分木
c)フルバイナリツリー
これらのツリーを区別するのを手伝ってください。これらのツリーはデータ構造でいつどこで使用されますか?
完全な二分木(場合によっては適切な二分木または2木または厳密に二分木)は、葉以外のすべてのノードに2つの子があるツリーです。
したがって、子が1つしかないノードはありません。厳密なバイナリツリーと同じように見えます。
Googleの完全/厳密なバイナリツリーの画像を次に示します。
完全な二分木とは、最後のレベルを除くすべてのレベルが完全に満たされ、すべてのノードが可能な限り残っている二分木です。
バランスの取れたツリーを意味するようです。
ここに完全な二分木の画像があります、Googleから、画像の完全な木の部分はボーナスです。
パーフェクトツリー:
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
STRICTとFULL BINARY TREEには違いがあります。
1)FULL BINARY TREE:正確に(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)STRICT BINARY TREE:各ノードには正確に0または2つの子があります。
例:以下は、STRICT BINARY TREEです。
18
/ \
15 30
/ \
40 50
完全なバイナリツリーの定義に混乱はないと思いますが、完全なバイナリツリーとは何かを伝えたい投稿の完全性のためです。
3)COMPLETE BINARY TREE:おそらく最終レベルを除くすべてのレベルが完全に満たされ、最終レベルにすべてのキーが可能な限り残っている場合、バイナリツリーは完全なバイナリツリーです。
例:以下は完全なバイナリツリーです。
18
/ \
15 30
/ \ / \
40 50 100 40
/ \ /
8 7 9
注:以下も完全なバイナリツリーです。
18
/ \
15 30
/ \ / \
40 50 100 40
免責事項一部の定義の主な情報源はウィキペディアです。私の答えを改善するための提案は歓迎します。
この投稿には受け入れられた答えがあり、良いものですが、私はまだ混乱していたので、これらの用語の違いについてもう少し明確にしたいと思います。
(1)FULL BINARY TREE-完全な二分木は、葉以外のすべてのノードに2つの子がある二分木です。これは厳密な二分木.
上記の2つは、完全または厳密なバイナリツリーの例です。
(2)COMPLETE BINARY TREE-さて、完全な二分木の定義は非常に曖昧であり、次のように述べています:-完全な二分木は、すべてのレベルおそらく最後のを除き、完全に満たされ、すべてのノードは可能な限り残っています。 最後のレベルで、可能な限り左に1から2hのノードを持つことができますh
斜体の行に注意してください。
あいまいさはイタリック体の行にあり、「おそらく最後を除く」、つまり最後のレベルも完全に満たされる可能性があることを意味します。つまり、この例外は常に満たされる必要はありません。例外が保持されない場合、それは私が投稿した2番目の画像とまったく同じであり、完全なバイナリツリーとも呼ばれます。したがって、完全な二分木も完全かつ完全ですが、逆もまた同様です。
ALMOST COMPLETE BINARY TREE-完全な二分木の定義の例外が成立する場合、ほぼ完全な二分木またはほぼ完全な二分木と呼ばれます。これは単なる完全なバイナリツリーの一種ですが、より明確にするためには別の定義が必要です。
したがって、ほぼ完全なバイナリツリーは次のようになります。画像では、ノードが可能な限り残っているので、完全なバイナリツリーのサブセットのように見えます。ツリーではなくその逆。 :
上記の答えから結論として、ここに完全/厳密、完全、完全な二分木の正確な違いがあります
Full/Strictly Binary Tree:-リーフノードを除くすべてのノードには2つの子があります
完全な二分木:-最後のレベルを除くすべてのレベルが完全に満たされ、すべてのノードが左揃えされます。
パーフェクトバイナリツリー:-リーフノードを除くすべてのノードには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の左側にある場合、つまり最後のレベル(h)が葉ノードを欠くことができる場合に限り、jはkより多くの子ノードを持ちますが、存在するノードは左にシフトする
例:
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
まあ、私は10の評判を持っていないので、私は画像を投稿できないことを残念に思います。これがあなたや他の人の助けになることを願っています!
完全な二分木は完全な二分木ですが、逆にすることはできません。また、バイナリの深さがnの場合はnoです。完全な二分木のノードの数は(2 ^ n-1)です。バイナリツリーでは2つの子を持つ必要はありませんが、完全なバイナリではすべてのノードに子がないか2つあります。
ノードがツリー形式で描画されているバイナリツリーを考えます。次に、上から下、左から右へノードの番号付けを開始します。完全なツリーには次のプロパティがあります。
Nに子がある場合、nより小さい番号のノードにはすべて2つの子があります。
Nに1つの子がある場合、それは左の子である必要があり、nより小さいすべてのノードには2つの子があります。さらに、nより大きい番号のノードには子がありません。
Nに子がない場合、nより大きい番号のノードには子がありません。
完全なバイナリツリーを使用して、ヒープを表すことができます。ギャップのない連続したメモリで簡単に表すことができます(つまり、最後に存在する可能性のあるスペースを除いて、すべての配列要素が使用されます)。
バイナリツリーの限られた経験では、私は思う:
高さ「h」の二分木を考えてみましょう。バイナリツリーは、すべての葉が高さ「h」または「h-1」で存在し、シーケンスに欠落している数字がない場合、完全なバイナリツリーと呼ばれます。
1
/ \
2 3
/ \
4 5
これは完全なバイナリツリーです。
1
/ \
2 3
/ /
4 6
シーケンスに番号5のノードがないため、完全なバイナリツリーではありません。