【问题标题】:Swapping binary trees in prolog在prolog中交换二叉树
【发布时间】:2013-12-16 21:52:43
【问题描述】:

这是立即学习 Prolog 中的练习 3.5。他们把它放在解释列表之前,所以我需要一个不涉及列表的过程。

任务是交换嵌套二叉树的叶子。如果查询是

swap(tree(tree(leaf(1), leaf(2)), leaf(4)), T).

答案应该是

T = (tree(leaf(4), tree(leaf(2), leaf(1))).

swap((X, Y), (Y, X)).

swap(tree(X, Y), T) :- 
   swap((X, Y), (Y, X)), 
   T = (Y, X).

我明白了

T = (leaf(4), tree(leaf(1), leaf(2))).

如您所见,leaf(1)leaf(2) 没有被交换。我想要一些提示,甚至你的程序,它应该适用于任何深度的节点。谢谢。

【问题讨论】:

    标签: recursion prolog swap


    【解决方案1】:

    你有一个基本情况交换叶子,一般情况交换一棵树! 对于一片叶子,无事可做:

    swap(leaf(X), leaf(X)).
    

    当你交换一棵树时,你也必须交换它的叶子,所以

    swap(tree(X,Y), tree(Y1,X1)) :-
        swap(X,X1),
        swap(Y,Y1).
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-20
      • 1970-01-01
      • 1970-01-01
      • 2019-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多