私は下の木の用語について混乱していて、私は木を研究していて、これらの木を区別することができません:
a)完全な二分木
b)厳密な二分木
c)完全な二分木
これらの木を区別するのを手伝ってください。これらのツリーはデータ構造でいつどこで使用されますか?
私は下の木の用語について混乱していて、私は木を研究していて、これらの木を区別することができません:
a)完全な二分木
b)厳密な二分木
c)完全な二分木
これらの木を区別するのを手伝ってください。これらのツリーはデータ構造でいつどこで使用されますか?
回答:
完全な二分木(適切な二分木、2木、または厳密に二分木)は、葉以外のすべてのノードに2つの子があるツリーです。
したがって、子が1つしかないノードはありません。厳密な二分木と同じように見えます。
これはグーグルからの完全/厳密な二分木の画像です:
完全な二分木は、おそらく最後のレベルを除くすべてのレベルが完全に満たされ、すべてのノードが可能な限り左にある二分木です。
バランスの取れた木を意味しているようです。
これはグーグルからの完全な二分木の画像です、画像の完全なツリー部分はボーナスです。
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
免責事項-いくつかの定義の主な情報源はウィキペディアです。私の答えを改善するための提案は大歓迎です。
この投稿には受け入れられた答えがあり、良いものですが、私はまだ混乱していたので、これらの用語の違いについてもう少し説明を加えたいと思います。
(1)完全なバイナリTREE- A完全なバイナリツリーは、葉以外の各ノードは、2つのchildren.Thisも呼ばれていた二分木であり、厳密に二分木。
上記の2つは、完全または厳密に2分木の例です。
(2)完全二分TREE-ここでは、完全二分木の定義は非常に曖昧であり、それは述べて: -完全なバイナリツリー内の各レベルの二分木であり、おそらく最後に除く外、完全に充填され、すべてのノードがとおりであります可能な限り左に。最後のレベルhで、可能な限り左に1〜2時間のノードを持つことができます。
イタリック体の線に注意してください。
あいまいさはイタリック体の行にあり、「おそらく最後を除いて」、これは最後のレベルも完全に満たされる可能性があることを意味します。つまり、この例外は常に満たされる必要はありません。例外が当てはまらない場合は、私が投稿した2番目の画像とまったく同じです。これは、完全な二分木とも呼ばれます。したがって、完全な二分木も完全で完全ですが、その逆はありません。これは、もう1つの定義で明確になります。
BINARY TREE-ほぼ完了し、完全なバイナリツリーの定義における例外は、それがほぼ完全二分木またはほぼ完全なバイナリツリーと呼ばれる保持しているとき。それ自体は完全な二分木の一種ですが、より明確にするために別の定義が必要です。
したがって、ほぼ完全な二分木は次のようになります。画像では、ノードが可能な限り左にあることがわかります。つまり、完全な二分木のサブセットのようになります。つまり、ほぼ完全な二分木はすべて完全な二分木です。ツリーですが、その逆はありません。:
ノードがツリー形式で描画される二分木について考えてみます。次に、ノードに上から下、左から右に番号を付け始めます。完全なツリーには、次のプロパティがあります。
nに子がある場合、n未満の番号が付けられたすべてのノードには2つの子があります。
nに1つの子がある場合、それは左の子である必要があり、n未満のすべてのノードには2つの子があります。さらに、nより大きい番号のノードには子がありません。
nに子がない場合、nより大きい番号のノードには子がありません。
完全な二分木を使用して、ヒープを表すことができます。ギャップのない連続したメモリで簡単に表すことができます(つまり、最後に存在する可能性のあるスペースを除いて、すべての配列要素が使用されます)。
完全な二分木は完全な二分木ですが、逆にすることはできません。二分木の深さがnの場合はありません。完全な二分木のノードの数は(2 ^ n-1)です。二分木では子が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の左側にある場合に限り、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
さて、評判が悪いので画像を投稿できず申し訳ありません。これがあなたや他の人に役立つことを願っています!
二分木の限られた経験では、私は次のように思います。
高さ「h」の二分木を考えてみましょう。二分木は、すべての葉が高さ「h」または「h-1」に存在し、シーケンスに番号が欠落していない場合、完全な二分木と呼ばれます。
1
/ \
2 3
/ \
4 5
それは完全な二分木です。
1
/ \
2 3
/ /
4 6
シーケンスに5番のノードがないため、完全な二分木ではありません。
すべてのノードに0または2の子がある場合、完全な二分木はいっぱいです。リーフノードの完全なバイナリ数は、内部ノードの数に1を加えたものですL = l + 1