2017-04-04 14 views
0

数字のバイナリツリーはヒープと呼ばれます(ヒーププロパティを満たすと言われます)そのノードに格納されている番号は、その子ノードのそれぞれに格納されている番号以下です。 3≤5,5≤8と一方≤7Treeがヒーププロパティを満たす場合はtrueを返す述語is_heap(Tree)を、それ以外の場合はfalseを返します。

tree(empty,3,tree(tree(empty,8,empty),5,tree(empty,7,empty))) 

5は、次のツリーがヒープ特性を満足しないため、6ではないので、例えば、以下のツリーは、ヒープ性を満たします未満または5

tree(tree(tree(empty,4,empty), 
     3,tree(empty,5,empty)),6,tree(tree(empty,9,empty),7,empty)) 

例に等しい:

?- is_heap(tree(tree(tree(empty,4,empty), 
     3,tree(empty,5,empty)),6,tree(tree(empty,9,empty),7,empty))). 
false. 

?- is_heap(tree(empty,3,tree(tree(empty,8,empty),5,tree(empty,7,empty)))). 
true 

任意の助けがにappriciatedされます。

+0

は、それは 'ツリー(バリュー、左、右)'ない 'ツリー(左、値、右)'であるが、私は、これは重要ではありませんね。より重要なのは、コードを書くことを一切せずに、誰かがあなたのコードを書くように頼むことです。あなたが書く必要があるコードは非常に簡単で、おそらくあなたはそれを私または他の誰かと同じように書くことができます。私はあなたにマイナスを与えます:-(申し訳ありません。 –

+0

ここにアイデアがあります:あなたは各非リーフノードの値を見て、左と右の両方の子がその値よりも小さいことを確認し、あなたが持っている限りこれを再帰的に行います –

+0

[ツリーが最小ヒープであるかどうかをチェックする](http:/ /)が重複している可能性があります。 /stackoverflow.com/questions/43187131/check-if-a-tree-is-a-min-heap) –

答えて

1

このようにして開始できます。ここでは木はtree(Value, Left, Right)ですが、これは簡単に変更できます。次に、開始:

is_heap(empty). 
is_heap(tree(X, L, R)) :- 
    is_heap(L, X), 
    is_heap(R, X). 

これで、is_heap/2と書くだけで、準備が整いました。ような何か:私は本で見た中で最もツリーの例で

is_heap(empty, ...). 
is_heap(tree(X, L, R), X0) :- 
    ..., 
    is_heap(L, X), 
    .... 
関連する問題