prolog rekursiv größten Knoten finden
-
11-07-2019 - |
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).
Lösung
Ist das href="https://stackoverflow.com/questions/315944/prolog-problem-with-recursion">?
Auf jeden Fall werde ich versuchen, das Denken zu tun zu lassen, da Sie scheinen Prolog zu lernen. Nicht zu erwähnen, dass ich nicht wirklich habe Prolog auf meinem Computer laufen, so konnte ich nicht sicher sein, meine vorgeschlagene Lösung würde tatsächlich funktionieren.
Die Tatsache, dass die 5 der einzige Knoten mit nur einem untergeordneten Knoten (das heißt die 8 es zu ignorieren) sollten Sie etwas sagen. Alle anderen Knoten sind entweder Blattknoten oder zwei Unterknoten.
Was genau es ist, dass Sie denken, diese beiden Regeln tun?
tree(t(nil,Q,_),Q).
tree(t(_,Q,nil),Q).