言語はJavaにしていますが、Javaに限った話ではないと思います。
完全二分木の定義についてです。
まず、私の使っている本には
「完全二分木は全ての葉が木の最下層にあり、派手ないノードは全て2つの子ノードを持っています。この条件を満たすには、ちょうど(2^n – 1)個のノードを持っていなければならない。」
http://www.ohshiro.tuis.ac.jp/~ohshiro/sougou/09/tree.html
また、こちらのサイトを参考にしますと、
「木の高さがkのとき,全ての葉の深さがk個またはk-1個となっている2分木」のことを完全二分木と定義しています。
この時点で食い違っていたので、さらに調べましたところ、
http://www.sophia-it.com/content/完全二分木
という記事を見つけました。
「完全2分木とは、2分木の木構造のうち、頂点(根)から最底辺(葉)に至る全てのノードが2つの子ノードを持ち、また、すべての葉が根から等しい距離にある構造のことである。
完全2分木は、左右のノードの数が等しい、木構造の深さをnとすればノードの数は2nとなる、あるいは、完全2分木を2分探索木として探索(検索)する場合、深さの数だけ探索可能であることがあらかじめ保証されている、といった特徴がある。
完全2分木においては、全ての葉は根から同じ深さ(レベル)にある。ただし例外的に、深さが1だけ異なる葉が存在し、その1だけ深い葉が木全体の左側に詰めてあるタイプの2分木も、完全2分木とみなされる。」
要は本で言っているのは、狭い意味での完全二分木であり、
http://www.ohshiro.tuis.ac.jp/~ohshiro/sougou/09/tree.html
こちらで言っているのは広い意味での完全二分木なのかと考えました。
広い意味での完全二分木の定義「木の高さがkのとき,全ての葉の深さがk個またはk-1個となっている2分木」を用いますと、木の高さが3の木で右側の葉(二つある)の高さが2となっている木のことも完全二分木と呼ぶわけですが、右側の葉が一つだけの場合も完全二分木と呼ぶのでしょうか?
すなわち、ノードの総数は10個で左側の部分木は完全二分木で、右側の部分木のノードは二つであるような木です。
伝わりませんでしたら、お知らせください。
回答お願いします。

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2016/08/31 07:04
2016/08/31 09:04