Frage

Nur ein einfacher binärer Baum, und ich will die den größten Knoten finden.
Beispiel Baum: 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);

Ich kann nicht wickeln nur meinen Kopf um es zu Prologs Anwendung. Hier i jeden Knoten angezeigt werden soll. Die ich bekommen, aber ich verstehe nicht, wie man den Maximalwert zu speichern und es rekursiv halten.

tree(nil).
tree(t(L,Root,R)) :- 
    tree(L),
    tree(R), 
    write(Root).

edit: Es wird überprüft, die alle Blattknoten, aber ignoriert die 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).
scroll top