Domanda

Solo un semplice albero binario e voglio trovare il nodo più grande.
esempio albero: t (t (t (zero, 1, zero), 2, t (zero, 3, zero)), 4, t (t (t (zero, 8, zero), 5, zero) , 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);

Non riesco proprio ad avvolgere la mia testa applicandola a Prolog. Qui visualizzo ogni nodo. Che ottengo, ma non capisco come salvare il valore massimo e mantenerlo in modo ricorsivo.

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

modifica: controlla tutti i nodi foglia, ma ignora la t (zero, 8, zero)

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).
È stato utile?

Soluzione

È un altro compito a casa ?

In ogni caso, proverò a farti pensare poiché sembra che tu stia imparando Prolog. Per non parlare del fatto che Prolog non è in esecuzione sul mio computer, quindi non posso essere sicuro che la mia soluzione suggerita funzioni davvero.

Il fatto che il 5 sia l'unico nodo con un solo nodo secondario (ovvero l'8 che sta ignorando) dovrebbe dirti qualcosa. Tutti gli altri nodi sono nodi foglia o hanno due nodi secondari.

Cosa pensi esattamente che facciano queste due regole?

tree(t(nil,Q,_),Q).
tree(t(_,Q,nil),Q).
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top