当前位置: 首页 > 知识库问答 >
问题:

编写一个谓词is_heap(Tree),如果Tree满足heap属性,则返回true,否则返回false

微生季
2023-03-14

如果对于树中的每个非叶节点,存储在该节点的数字小于或等于存储在其每个子节点的数字,则二叉树称为堆(或者,称为满足堆属性)。例如,下面的树满足heap属性,因为3≤ 5, 5 ≤ 8和5≤ 7.

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

另一方面,下面的树不满足堆属性,因为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 

任何帮助都将得到认可。

共有1个答案

米子轩
2023-03-14

你可以像这样开始。这里的树是树(值,左,右),但你可以很容易地改变它。然后你开始:

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),
    ....
 类似资料:
  • 我有一个很好的方法。这就是它的样子。 我想把这个换成Lambda。但我不知道如何填写if(条件)在外面返回true或false。我知道我也可以在流中完成。有人能举个例子吗?

  • 问题内容: 我在node.js中编写一个函数来查询PostgreSQL表。 如果该行存在,我想从该行返回id列。 如果不存在,我想将其插入并返回ID()。 我一直在尝试和语句的变体,但似乎无法使其正常工作。 问题答案: 我建议在数据库端进行检查,然后将ID返回给nodejs。 例子: 而不是在Node.js端(在此示例中,我使用的是node-postgres):

  • 我有一个很管用的方法。这是看起来的样子。 我想把这个换成兰姆达。里面带着shell来了uo,但是我不知道怎么填充if(条件)返回true还是返回false外面。

  • 编写一个方法,根据字符(char)[输入]是否是要编码的有效字符,返回true或false。即,如果输入[输入字符]为'a'-'z'或'a'-'z',则返回true,否则返回false。 为什么我的答案错了???? 公共静态布尔isValidChar_Q1(char chr){ }

  • 问题内容: Google Guava有一个始终返回的谓词。Java 8是否具有类似的功能?我知道我可以使用,但我想要类似的预制产品。 问题答案: Java 8中没有内置的永远为真和永远为假的谓词。最简单的编写方式是 和 比较这些 最后是一个匿名的内部类: Guava具有这些内置谓词的原因可能是静态方法调用比匿名内部类具有巨大的语法优势。在Java 8中,lambda语法非常简洁,以至于写出静态方法

  • Google Guava有一个谓词,它总是返回。Java8的有类似的东西吗?我知道我可以使用,但我需要一些预先制作的东西,类似于。