Просто простое двоичное дерево, и я хочу найти самый большой узел.
дерево примеров: t (t (t (ноль, 1, ноль), 2, t (ноль, 3, ноль)), 4, t (t (т (ноль, 8, ноль), 5, ноль) , 6, т (ноль, 7, ноль))) * * +1002
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).
edit: проверяет все листовые узлы, но игнорирует 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).