Implementazione di AVL tree

Kawashita
Salve a tutti, :D sto implementando un albero AVL con java e, sono di fronte al seguente problema:
dato che l'albero è uni-bilanciato se la differenza in modulo fra il sottoalbero sinistro e quello destro è <2,
come posso tenere costantemente aggiornate le altezze nel nodo, in modo da calcolare lo sbilanciamento semplicemente con:

int unBal() {
if(isEmpty()) return 0;
else return root.right.height – root.left.height;
}

notare che ho definito nella classe Node un nodo come:

private class Node {

int element;
Node left, right;
int height;

}

vorrei avere consigli se esiste un modo per evitare di chiamare costantemente un metodo ricorsivo di aggiornamento dell'altezza senza dover utilizzare un metodo ricorsivo, che diventerebbe veramente pesante farlo partire alla fine di ogni inserimento o rimozione, o se quella e l'unica soluzione possibile.
grazie mille a chiunque possa illuminarmi. :D

Risposte
Kawashita
sono riuscito a risolverlo. :-D :-D :-D :-D :-D :-D :-D

Kawashita
ho un'altro problema :oops: :oops: :
per rendere l'albero bilanciato, devo fargli compiere delle "rotazioni" ai nodi ed il codice che eseguo è questo:
void LL() {
Node tmp = left;
left = tmp.right;
tmp.right = this;
}
(analogo per la rotazione verso destra).
ora la domanda è : perchè mi cancella i nodi invece di ruotarli??

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.