Abb Balanceado

Páginas: 5 (1235 palabras) Publicado: 18 de octubre de 2012
package clasesBasicasParaElTp;


public class Arbol {

// variable de instancia del Objeto Arbol
private NodoArbol raiz;
int cantidadDeNodos;
int cantidadDeEliminados;

// constructor del Objeto Arbol
public Arbol() {

this.raiz=null;
this.cantidadDeNodos=0;
this.cantidadDeEliminados=0;
}



// funciòn principal utilizada para insertar elementos alàrbol (sin chequear que el àrbol llegue a estar desbanlaceado)
public void insertarNodo(int d){

if(this.raiz==null){
this.raiz=new NodoArbol(d);
this.cantidadDeNodos++;
}
else{
raiz.insertar(d);
this.cantidadDeNodos++;
}
}





// funciòn principal que genera un nuevo àrbol ordenado y balanceado(con los mismos elementos que el
// àrbol desequilibrado)
private NodoArbol insercionBalanceada()
{

int i;
Arbol arbol=new Arbol();

for(i=1; i nuevoArbol.dato )
{
nuevoArbol.derecha = insercionBalanceada( x, nuevoArbol.derecha );

// en caso de que el àrbol se encuentre desbanlaceado por su rama derecha
if( altura( nuevoArbol.derecha ) - altura(nuevoArbol.izquierda ) == 2 )
{
if( x > nuevoArbol.derecha.dato )
{
nuevoArbol = rotarSubarbolDerecho( nuevoArbol );
}
}
}

// luego de cada inserciòn se va actualizando la altura del arbol, de manera recursiva
nuevoArbol.altura = Math.max( altura( nuevoArbol.izquierda ), altura( nuevoArbol.derecha ) ) + 1;


//finalmente, se devuelve un àrbol balanceado
return nuevoArbol;
}



// funciòn que balancea al nuevo àrbol, cuando este se encuentre desbanlaceado por su rama izquierda
private static NodoArbol rotarSubarbolIzquierdo( NodoArbol raizDelArbol )
{

// se realizan algunos corrimientos de nodos (que lograràn luego el balanceo, cuando la funciòn sea invocada)
NodoArbol futuraNuevaRaiz= raizDelArbol.izquierda;
raizDelArbol.izquierda = futuraNuevaRaiz.derecha;
futuraNuevaRaiz.derecha = raizDelArbol;


// se actualizan las alturas de los nodos involucrados en la funciòn
raizDelArbol.altura = Math.max( altura(raizDelArbol.izquierda), altura(raizDelArbol.derecha)) + 1;
futuraNuevaRaiz.altura = Math.max( altura( futuraNuevaRaiz.izquierda ),raizDelArbol.altura ) + 1;


//finalmente, la funciòn devuelve al subàrbol izquierdo (que en realidad serà, luego, la nueva raìz del àrbol)
return futuraNuevaRaiz;

}



//funciòn que balancea al nuevo àrbol, cuando este se encuentre desbanlaceado por su rama derecha
private static NodoArbol rotarSubarbolDerecho( NodoArbol raizDelArbol )
{

// se realizan algunos corrimientos denodos (que lograràn luego el balanceo, cuando la funciòn sea invocada)
NodoArbol futuraNuevaRaiz = raizDelArbol.derecha;
raizDelArbol.derecha = futuraNuevaRaiz.izquierda;
futuraNuevaRaiz.izquierda = raizDelArbol;


// se actualizan las alturas de los nodos involucrados en la funciòn
raizDelArbol.altura = Math.max( altura(raizDelArbol.izquierda), altura(raizDelArbol.derecha) ) +1;
futuraNuevaRaiz.altura = Math.max( altura( futuraNuevaRaiz.derecha ), raizDelArbol.altura ) + 1;


//finalmente, la funciòn devuelve al subàrbol derecho (que en realidad serà, luego, la nueva raìz del àrbol)
return futuraNuevaRaiz;

}



// funciòn que reemplaza al àrbol desequlibrado por otro igual, en cuanto a sus elementos, pero balanceado
public voidbalancear()
{

this.raiz = insercionBalanceada();

}






public boolean buscar(int numero)
{

if (buscar(this.raiz, numero) == true)
{

return true;
}

else
{
return false;
}
}



private boolean buscar (NodoArbol n, int numero){

if(n != null)
{
if(n.dato == numero)
{
return true;
}

// se busca recursivamente en "ok1" y "ok2" si el...
Leer documento completo

Regístrate para leer el documento completo.

Estos documentos también te pueden resultar útiles

  • ABB
  • Informe Abb
  • Caso Abb
  • Robot abb
  • Caso Abb
  • Animacion abb
  • Abb transformadores
  • hmi abb

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS