[Avl-cvs] avl/src avlt.cpp,1.5,1.6 avlt.h,1.6,1.7
Brought to you by:
hetfield666,
jah2003
From: Gianlorenzo D\\'A. <ja...@us...> - 2004-07-21 16:58:30
|
Update of /cvsroot/avl/avl/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv1178/src Modified Files: avlt.cpp avlt.h Log Message: changed fdb handling Index: avlt.cpp =================================================================== RCS file: /cvsroot/avl/avl/src/avlt.cpp,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** avlt.cpp 18 Jul 2004 16:57:10 -0000 1.5 --- avlt.cpp 21 Jul 2004 16:58:20 -0000 1.6 *************** *** 29,52 **** : Bst(val) { ! setFdb( s ); } /** Imposta il Fattore di Bilanciamento a s*/ ! void Avlt::setFdb( int s ) { ! fdb = s; } ! /** Calcola il FdB del nodo corrente*/ void Avlt::setFdb() { //Il fattore di bilanciamento è la differenza tra l'altezza del sottoallbero di destra e quella del sottoalbero di sinistra ! int l, r; ! l = r = 0; ! if( getLeft() ) ! l = getLeft()->height() + 1; //Altezza del sottoalbero di sinistra ! if( getRight() ) ! r = getRight()->height() + 1; //Altezza del sottoalbero di destra ! setFdb( l-r ); } --- 29,57 ---- : Bst(val) { ! setHeight( s ); } /** Imposta il Fattore di Bilanciamento a s*/ ! /*void Avlt::setFdb( int s ) { ! setHeight(s); } ! */ /** Calcola il FdB del nodo corrente*/ void Avlt::setFdb() { //Il fattore di bilanciamento è la differenza tra l'altezza del sottoallbero di destra e quella del sottoalbero di sinistra ! if(isLeaf()) ! setHeight(0); ! else ! { ! int l, r; ! l = r = 0; ! if( getLeft() ) ! l = ((Avlt *)getLeft())->getHeight(); // l contiene l'altezza del sottoalbero sinistro ! if( getRight() ) ! r = ((Avlt *)getRight())->getHeight(); // r contiene l'altezza del sottoalbero destro ! setHeight( 1 + ( l>r ? l : r ) ); // viene restituita l'altezza del sottoalbero più lungo incrementata di 1 ! } } *************** *** 67,71 **** int Avlt::getFdb() { ! return fdb; } --- 72,92 ---- int Avlt::getFdb() { ! int l, r; ! l = r = 0; ! if( getLeft() ) ! l = ((Avlt *)getLeft())->getHeight() + 1; //Altezza del sottoalbero di sinistra ! if( getRight() ) ! r = ((Avlt *)getRight())->getHeight() + 1; //Altezza del sottoalbero di destra ! return l-r; ! } ! ! int Avlt::getHeight() ! { ! return h; ! } ! ! void Avlt::setHeight(int he) ! { ! h = he; } *************** *** 96,99 **** --- 117,121 ---- ((Avlt *)(aux->getLeft()))->setFdb(); + aux->setFdb(); return aux; *************** *** 129,132 **** --- 151,155 ---- ((Avlt *)(aux->getRight()))->setFdb(); + aux->setFdb(); return aux; *************** *** 163,166 **** --- 186,190 ---- getLeft()->setParent(this); getLeft()->setValue(key); + ((Avlt *)getLeft())->setHeight(0); setFdb(); } *************** *** 186,189 **** --- 210,214 ---- getRight()->setParent(this); getRight()->setValue(key); + ((Avlt *)getRight())->setHeight(0); setFdb(); } Index: avlt.h =================================================================== RCS file: /cvsroot/avl/avl/src/avlt.h,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** avlt.h 18 Jul 2004 16:57:10 -0000 1.6 --- avlt.h 21 Jul 2004 16:58:20 -0000 1.7 *************** *** 32,36 **** { private: ! int fdb; //Fattore di Bilanciamento Avlt *rightRotate(); Avlt *leftRotate(); --- 32,37 ---- { private: ! // int fdb; //Fattore di Bilanciamento ! int h; Avlt *rightRotate(); Avlt *leftRotate(); *************** *** 43,50 **** ~Avlt(); ! void setFdb( int ); void setFdb(); void setFdb(Avlt *, Avlt *); int getFdb(); bool checkBalance(); --- 44,53 ---- ~Avlt(); ! // void setFdb( int ); void setFdb(); void setFdb(Avlt *, Avlt *); int getFdb(); + void setHeight(int); + int getHeight(); bool checkBalance(); |