我用这样的任意但有限的子树表示树:
tree(empty).
tree(branch(R, Ts)) :- integer(R), isTreeList(Ts).
isTreeList([]).
isTreeList([T | Ts]) :- tree(T), isTreeList(Ts).
(如果这种表述好或坏,请忽略,这只是为了提出这个问题)
This帖子显示了如何计算二叉树的深度。到目前为止我的进展:
depth(tree(empty), 0).
depth(tree(branch(_, SubTrees), D)
:- < calculate somehow the depths D1, ..., Dn of the subtrees >
, max_list([D1, ..., Dn], MaxD)
, D is MaxD + 1
如何确定D1, ..., Dn
?
depth(tree(empty), 0).
depth(tree(branch(_, SubTrees), D)
:- maplist(depth, SubTrees, Depths)
, max_list(Depths, MaxD)
, D is MaxD + 1
请注意,如果SubTrees
为空列表,则会失败 - @ max66的解决方案仍然有效。
答案 0 :(得分:1)
每次计算列表中的值时,都可以检查最大值。
我的意思是
depth(tree(empty), 0).
depth([], 0).
depth([T | L], D) :-
depth(T, D0),
depth(L, D1),
D is max(D0, D1).
depth(tree(branch(_, SubTrees)), D) :-
depth(SubTrees, D0),
D is D0+1.