[Avl-cvs] avl/src avlt.cpp,1.12,1.13
Brought to you by:
hetfield666,
jah2003
From: Gianlorenzo D\\'A. <ja...@us...> - 2004-09-17 07:58:54
|
Update of /cvsroot/avl/avl/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv26342 Modified Files: avlt.cpp Log Message: Index: avlt.cpp =================================================================== RCS file: /cvsroot/avl/avl/src/avlt.cpp,v retrieving revision 1.12 retrieving revision 1.13 diff -C2 -d -r1.12 -r1.13 *** avlt.cpp 8 Sep 2004 10:14:46 -0000 1.12 --- avlt.cpp 17 Sep 2004 07:58:46 -0000 1.13 *************** *** 335,339 **** // Il metodo consiste nella ricerca del nodo da eliminare tramite un algoritmo ricorsivo. Una volta trovato il nodo si elimina utilizzando un algoritmo simile a quello dei BST. Durante l'eliminazione l'albero potrebbe essersi sbilanciato lungo tutto il cammino che va dalla radice alla posizione del nodo da eliminare. Nel caso in cui il nodo da eliminare ha entrambi i figli l'albero potrebbe sbilanciarsi nel cammino che va dal nodo da eliminare ed il suo successore. Avlt * aux, *aux1, *aux2; ! aux = this; --- 335,339 ---- // Il metodo consiste nella ricerca del nodo da eliminare tramite un algoritmo ricorsivo. Una volta trovato il nodo si elimina utilizzando un algoritmo simile a quello dei BST. Durante l'eliminazione l'albero potrebbe essersi sbilanciato lungo tutto il cammino che va dalla radice alla posizione del nodo da eliminare. Nel caso in cui il nodo da eliminare ha entrambi i figli l'albero potrebbe sbilanciarsi nel cammino che va dal nodo da eliminare ed il suo successore. Avlt * aux, *aux1, *aux2; ! aux1 = aux2 = NULL; aux = this; *************** *** 360,364 **** aux1->setLeft( NULL ); ! aux1->setRight( NULL ); if( aux1 != this ) { --- 360,365 ---- aux1->setLeft( NULL ); ! aux1->setRight( NULL ); ! aux = aux2; if( aux1 != this ) { *************** *** 368,391 **** do{ aux2=(Avlt *)(aux2->getParent()); ! if(aux2) ! { aux2->setFdb(); if( aux2->getFdb() == -2 ) //Se l'albero si è sbilanciato verso destra if( ((Avlt *)(aux2->getRight()))->getFdb() == +1) //Se il sottoalbero di destra ha il ramo sinistro più lungo si opera una rotazione ds altrimenti una rotazione dd ! { ! ((Avlt *)(aux2->getRight()))->rightRotate(); ! aux2->leftRotate(); ! } ! else ! aux2->leftRotate(); else //condizioni simmetriche a sopra if( aux2->getFdb() == 2 ) if( ((Avlt *)(aux2->getLeft()))->getFdb() == -1) { ! ((Avlt *)(aux2->getLeft()))->leftRotate(); ! aux2->rightRotate(); ! } ! else ! aux2->rightRotate(); } }while( aux2 != this && aux2 ); --- 369,392 ---- do{ aux2=(Avlt *)(aux2->getParent()); ! if(aux2) ! { aux2->setFdb(); if( aux2->getFdb() == -2 ) //Se l'albero si è sbilanciato verso destra if( ((Avlt *)(aux2->getRight()))->getFdb() == +1) //Se il sottoalbero di destra ha il ramo sinistro più lungo si opera una rotazione ds altrimenti una rotazione dd ! { ! ((Avlt *)(aux2->getRight()))->rightRotate(); ! aux2->leftRotate(); ! } ! else ! aux2->leftRotate(); else //condizioni simmetriche a sopra if( aux2->getFdb() == 2 ) if( ((Avlt *)(aux2->getLeft()))->getFdb() == -1) { ! ((Avlt *)(aux2->getLeft()))->leftRotate(); ! aux2->rightRotate(); ! } ! else ! aux2->rightRotate(); } }while( aux2 != this && aux2 ); |