Простое двоичное дерево, и я хочу найти самый большой узел.
Пример дерева: t (t (t (nil, 1, nil), 2, t (nil, 3, nil)), 4, t (t (t (nil, 8, nil), 5, nil) 6, т (ноль, 7, ноль)))Пролог рекурсивно находит наибольший узел
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).
редактировать: Он проверяет все узлы листьев, но игнорирует т (ноль, 8, ноль)
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).
Я заметил, что в комментарии ниже вы поняли это. Было бы здорово, если бы вы могли ответить на свой вопрос здесь. – Rich