나는 과정에서 프롤로그를 공부하고 있습니다. 연습을 위해, 주어진 트리의 모든 하위 트리를 생성하는 것이 부분적으로 필요합니다. 문제는 잘못된 서브 트리 프롤로그 프로그램에서 잘못된 하위 트리가 생성됩니까?
다음 코드 여기build_tree3(T):-
T=t(t(t(nil, -5, nil), 4, t(t(nil, 15, nil), -20, t(nil, 10, nil))), 2, t(nil, -8, t(t(nil, 9, nil),12,t(nil, 10, nil)))).
get_sol(Tree, List, N):-
without_root(Tree, List1, N1),
with_root(Tree, List2, N2),!,
max_set(List1, N1, List2, N2, List, N).
max_set(List1, N1, List2, N2, List, N) :-
(N1>N2,List=List1,N=N1;
N2>N1,List=List2,N=N2;
N2=:=N1,N=N1,(List=List1;List=List2)).
without_root(nil, _, 0).
without_root(t(L, _, R), List, N):-
get_sol(L, LeftList, LeftN),
get_sol(R, RightList, RightN),
append(LeftList, RightList, List),
N is LeftN + RightN.
with_root(nil, [], 0).
with_root(t(L, X, R), [X|List], N):-
with_root(L, LeftList, LeftN),
with_root(R, RightList, RightN),
append(LeftList, RightList, List),
N is LeftN + RightN + X.
그것의 결과가 L = 15,10,12,9,10이다
build_tree3(T), get_sol(T, L, N).
콘솔이기의 생성이다 ], N = 56; 일 때, L = [12,9,10], N = 31;
L = [12,9,10]이라고 가정합니다. N = 31은 예상하는 출구 중 하나입니까? 또한 N <0을 반환하더라도 모든 하위 트리를 반환하려고합니다. – coder
네, 맞습니다. 정확합니다. – Infested
두 번째 질문은 무엇입니까 ?? (대답에서 나는 N <0)에도 모든 하위 트리를 원한다는 것을 이해합니다. – coder