バイナリツリーが完全なバイナリツリーであるかどうかをチェックするアルゴリズムとは何ですか? (Prologを使用して)。例えばPrologを使用して完全なバイナリツリー述語を書く方法
:
?- complete(nil).
true.
?- complete(tree(1,nil,nil)).
true.
?- complete(tree(1,tree(2,nil,nil),nil)).
false.
?- complete(tree(1,tree(2,nil,nil),tree(3,nil,nil))).
true.
スタートのために、英語でのアルゴリズムは何ですか? –
さて、すべての葉が根から同じ距離にある必要があります。だから、最も単純なアルゴリズムは、すべてを通過し、すべてがルートから同じ距離を持っているかどうかをチェックします。 – user550413
おそらく少し速いアプローチ:1枚の葉の深さを見つけてから、奥行きがより小さい葉ノードまたは等しい深さを有する葉でないノードを探す。どちらかが見つかった場合、バイナリツリーは「完全」ではありません。 – hardmath