【问题标题】:Prolog - Balanced tree or notProlog - 平衡树与否
【发布时间】:2011-09-08 15:47:52
【问题描述】:

我想编写一个程序来告诉我一棵树是否平衡。在这种情况下,平衡意味着相同的高度或 1 的高度差。

这是我目前所写的,但对于 1 的高度差不起作用。为什么?

balanced(l(_)).
balanced(b(B1, B2)):-
    height(B1,H),
    height(B2,H),
    balanced(B1),
    balanced(B2).

balanced(b(B1,B2)):-
    height(B1,H + 1),
    height(B2,H),
    balanced(B1),
    balanced(B2).

balanced(b(B1,B2)):-
    height(B1,H),
    height(B2,H + 1),
    balanced(B1),
    balanced(B2).

【问题讨论】:

    标签: prolog tree-balancing


    【解决方案1】:

    H + 1 不会被评估为H 的值加一,如果你不告诉 Prolog 进行算术评估;相反,Prolog 使用 + 作为仿函数,H1 作为参数来构建一个术语。 (尝试H + 1 =.. L 并检查L 的值,让自己相信这一事实。)

    做类似的事情

    height(B1, H1),
    height(B2, H2),
    abs(H1 - H2) =< 1.
    

    =&lt; 将执行算术评估。

    【讨论】:

    • 如果我尝试你的建议 my tree6(b(b(l(1), b(l(2), b(l(3),b(l(4), l(5) )))),b(l(6), b(l(7), b(l(8),b(l(9), l(10))))))) 根据代码平衡,它不应该是。
    • @Josie,忘记调用 abs 函数。
    • 您还必须检查子树。
    • @starblue,你在找谁?
    猜你喜欢
    • 2015-08-18
    • 1970-01-01
    • 2015-04-16
    • 1970-01-01
    • 1970-01-01
    • 2011-09-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多