【问题标题】:prolog need to compute the tree sizeprolog 需要计算树的大小
【发布时间】:2015-06-04 06:45:43
【问题描述】:

我需要使用以下方法获取树的大小:size(Tree,Size)

我目前有错误,请指教!

size(empty, Size).
size(tree(L, _, R), Size) :-
    size(L, Left_Size),
    size(R, Right_Size),
    Size is
        Left_Size + Right_Size + 1.

输出应该产生:

?- size(node(1,2),X).
X = 2.
?- size(node(1,[2,3,4]),X).
X = 2.
?- size(node(node(a,b),[2,3,4]),X).
X = 3.

【问题讨论】:

标签: prolog size nodes


【解决方案1】:

Prolog 是一种声明性语言,你必须正确地陈述你的模式:

size(node(L,R), Size) :- ... % why you add 1 to left+right sizes ?

从示例中,我建议在看到任何不是节点的东西时停止使用 Size = 1 的递归:

size(node(L,R), Size) :- !, ...
size(_, 1).

【讨论】:

    【解决方案2】:

    大小树(无,0)。 % nil 模拟一个空节点

    size_tree(node(Root,Left,Right), Size):-

     Root\= nil,
     RootSize = 1,
     size_tree(Left, LeftSide),
     size_tree(Right, RightSide),
     Size is (RootSize + LeftSide + RightSide).
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-02
      • 2018-02-28
      • 2012-08-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多