Prolog는 재귀 적으로 가장 큰 노드를 찾습니다
-
11-07-2019 - |
문제
간단한 이진 트리 일뿐 아니라 가장 큰 노드를 찾고 싶습니다.
예제 트리 : t (t (t (nil, 1, nil), 2, t (nil, 3, nil)), 4, t (t (t (nil, 8, nil), 5, nil), 6, t (nil, 7, nil)))))
int L(t,max) {
if(t=null) return max;
if(max<t.root) max = t.root;
LN(t,max);
RN(t,max);
return max;
}
L(tree,tree.root);
나는 단지 머리를 프롤로그에 적용하는 데 머리를 감을 수 없습니다. 여기에 각 노드가 표시됩니다. 내가 얻는 것은하지만 최대 값을 저장하고 재귀 적으로 유지하는 방법을 이해하지 못합니다.
tree(nil).
tree(t(L,Root,R)) :-
tree(L),
tree(R),
write(Root).
편집 : 모든 잎 노드를 확인하지만 t (nil, 8, nil)를 무시합니다.
tree(nil,0).
tree(t(nil,Q,nil),Q) :- !.
tree(t(nil,Q,_),Q).
tree(t(_,Q,nil),Q).
tree(t(L,_,R),Max) :-
tree(L, LValue),
tree(R, RValue),
max(LValue,RValue,Max).
해결책
이거야 또 다른 숙제 과제?
어쨌든, 나는 당신이 Prolog를 배우는 것처럼 보이기 때문에 당신이 생각을 할 수 있도록 노력할 것입니다. 실제로 컴퓨터에서 Prolog가 실행되지 않는다는 사실은 말할 것도없이 제안 된 솔루션이 실제로 작동 할 것이라고 확신 할 수 없었습니다.
5가 하나의 서브 노드 만있는 유일한 노드라는 사실 (예 : 무시하고 있음)은 무언가를 말해야합니다. 다른 모든 노드는 잎 노드이거나 두 개의 서브 노드가 있습니다.
이 두 규칙이 그렇게 생각하는 것은 정확히 무엇입니까?
tree(t(nil,Q,_),Q).
tree(t(_,Q,nil),Q).
제휴하지 않습니다 StackOverflow