gpt4 book ai didi

prolog - 二叉树 T 的叶节点中的值列表

转载 作者:行者123 更新时间:2023-12-04 23:20:06 24 4
gpt4 key购买 nike

List 是二叉树叶节点中的值列表,我试图弄清楚如何输出它。这给了我所有的节点,但我只需要叶子。

lea(nil,[]).
lea(t(X,L,R),[X|L]) :-
lea(L,L1),
lea(R,L2),
append(L1,L2,L).

运行这个给我:
?- lea(t(a,t(b,t(d,nil,nil),t(e,nil,nil)),t(c,nil,t(f,t(g,nil,nil),nil))),
List).
List = [a, b, d, e, c, f, g]

但是我需要
List = [d, e,g] 

是否可以。

最佳答案

让我们使用 DCG - 定语从句语法。我们从您的原始定义开始:

lea(T, L) :-
phrase(values(T), L).

values(nil) -->
[].
values(t(X,L,R)) -->
[X],
values(L),
values(R).

现在,我们需要将自己限制在那些 t/3那是叶子。一种可能性是枚举所有情况:
lea2(T, L) :-
phrase(leaves(T), L).

leaves(nil) -->
[].
leaves(t(X,nil,nil)) -->
[X].
leaves(t(_,L,R)) -->
{ dif(L+R,nil+nil) },
leaves(L),
leaves(R).

使用类似于 if_/3 的条件结构会更好、更有效。 .我想把这个留给感兴趣的人。

关于prolog - 二叉树 T 的叶节点中的值列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29366094/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com