문제

간단한 이진 트리 일뿐 아니라 가장 큰 노드를 찾고 싶습니다.
예제 트리 : 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).
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top