Question

Juste un simple arbre binaire et je veux trouver le plus gros noeud. Exemple d'arbre: t (t (t (nil, 1, nil), 2, t (nil, 3, nil)), 4, t (t (t (nil, 8, nil), 5, nil) , 6, t (nul, 7, nul)))

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);

Je n'arrive pas à comprendre pourquoi je l'applique à Prolog. Ici, je montre chaque noeud. Ce que je reçois, mais je ne comprends pas comment enregistrer la valeur maximale et la conserver récursivement.

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

edit: Il vérifie tous les nœuds feuilles mais ignore le 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).
Était-ce utile?

La solution

S'agit-il de cette autre travail à faire chez vous ?

En tout cas, je vais essayer de vous laisser réfléchir car vous semblez apprendre Prolog. Sans parler du fait que Prolog ne fonctionne pas sur mon ordinateur, je ne pouvais donc pas être sûr que ma solution suggérée fonctionnerait réellement.

Le fait que le 5 soit le seul nœud avec un seul sous-nœud (c’est-à-dire le 8 qu’il ignore) devrait vous dire quelque chose. Tous les autres nœuds sont soit des nœuds feuilles, soit deux sous-nœuds.

Que pensez-vous exactement de ces deux règles?

tree(t(nil,Q,_),Q).
tree(t(_,Q,nil),Q).
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top