Академический Документы
Профессиональный Документы
Культура Документы
CUSCO
Escuela Profesional De Ingeniera De Sistemas
TEMA:
Arboles AVL
CURSO:
Algortmica y
Laboratorio de
Programacin II
DOCENTE:
GRUPO:
:
CUSCO-PER
2016
ROTACIONES
El reequilibrado se produce de abajo hacia arriba sobre los nodos en los que se
produce el desequilibrio. Pueden darse dos casos: rotacin simple o rotacin
doble; a su vez ambos casos pueden ser hacia la derecha o hacia la izquierda.
Rotacin simple a la derecha
De un rbol de raz (r) y de hijos izquierdo (i) y derecho (d), lo que haremos
ser formar un nuevo rbol cuya raz sea la raz del hijo izquierdo, como hijo
izquierdo colocamos el hijo izquierdo de i (nuestro i) y como hijo derecho
construimos un nuevo rbol que tendr como raz, la raz del rbol (r), el hijo
derecho de i (d) ser el hijo izquierdo y el hijo derecho ser el hijo derecho del
rbol (d).
Pgina 1
Pgina 2
AVL");
if (arbolAVL.Eliminar(Elemento) == false)
{
Console.WriteLine("El nodo a Eliminar no se encuentra en el Arbol
Console.WriteLine("Nodo NO encontrado");
}
else
{
Console.WriteLine("El Nodo Ha Sido Eliminado del Arbol");
Console.WriteLine("Nodo Eliminadoo!!!");
}
}
else
{
Console.WriteLine("El Arbol Esta Vacio");
}
break;
case 6: Finalizar();
break;
}
} while (Opcion !=6);
}
static int Menu()
{
int Resultado = 0;
do
{
Console.WriteLine("MENU DE ARBOLES");
Console.WriteLine("");
Console.WriteLine("1.- Registrar un Nuevo Nodo");
Console.WriteLine("2.- Recorrido en Pre-orden");
Console.WriteLine("3.- Recorrido en Post-orden");
Console.WriteLine("4.- Recorrido en In-orden");
Console.WriteLine("5.- Eliminar un Nodo");
Console.WriteLine("6.- Finalizar el Programa");
Console.WriteLine("");
Console.Write("Presione una opcion: ");
Resultado = int.Parse(Console.ReadLine());
Console.WriteLine("");
if (Resultado < 1 || Resultado > 6)
{
Console.WriteLine("ERROR, Opcion Invalida");
Console.ReadLine();
Console.WriteLine("");
}
Pgina 3
//----------------------------------------------------------------------------------
Pgina 4
Pgina 5
}
//ACTUALIZZAR LA ALTURA
if ((subAr.hijoIzq == null) && (subAr.hijoDer != null))
{
subAr.fe = subAr.hijoDer.fe + 1;
}
else if ((subAr.hijoDer == null) && (subAr.hijoIzq != null))
{
subAr.fe = subAr.hijoIzq.fe + 1;
}
else
{
subAr.fe = Math.Max(obtenerFE(subAr.hijoIzq), obtenerFE(subAr.hijoDer)) + 1;
}
return nuevoPadre;
}
//METODO PARA INSERTAR
public virtual void Insertar(int d)
{
NodoArbolAVL nuevo = new NodoArbolAVL(d);
if (raiz == null)
{
raiz = nuevo;
}
else
{
raiz = insertarAVL(nuevo, raiz);
}
}
// recorridos
//Metodo para recorrer el arbol InOrden
public virtual void InOrden(NodoArbolAVL r)
{
if (r != null)
{
InOrden(r.hijoIzq);
Pgina 6
}
}
// para recorrer el arbol PreOrden
public virtual void PreOrden(NodoArbolAVL r)
{
if (r != null)
{
Console.Write(r.dato + ", ");
PreOrden(r.hijoIzq);
PreOrden(r.hijoDer);
}
}
// para recorrer el arbol PostOrden
public virtual void PostOrden(NodoArbolAVL r)
{
if (r != null)
{
PostOrden(r.hijoIzq);
PostOrden(r.hijoDer);
Console.Write(r.dato + ", ");
}
}
public virtual bool Eliminar(int d)
{
NodoArbolAVL aux = raiz;
NodoArbolAVL padre = raiz;
bool eshijoIzq = true;
while (aux.dato != d)
{
padre = aux;
if (d < aux.dato)
{
eshijoIzq = true;
aux = aux.hijoIzq;
}
else
{
eshijoIzq = false;
aux = aux.hijoDer;
}
if (aux == null)
{
return false;
}
} //Fin de While
if (aux.hijoIzq == null && aux.hijoDer == null)
{
if (aux == raiz)
{
raiz = null;
}
else if (eshijoIzq)
{
padre.hijoIzq = null;
}
else
Pgina 7
padre.hijoDer = null;
}
else if (aux.hijoDer == null)
{
if (aux == raiz)
{
raiz = aux.hijoIzq;
}
else if (eshijoIzq)
{
padre.hijoIzq = aux.hijoIzq;
}
else
{
padre.hijoDer = aux.hijoIzq;
}
}
else if (aux.hijoIzq == null)
{
if (aux == raiz)
{
raiz = aux.hijoDer;
}
else if (eshijoIzq)
{
padre.hijoIzq = aux.hijoDer;
}
else
{
padre.hijoDer = aux.hijoIzq;
}
}
else
{
NodoArbolAVL reemplazo = obtenerNodoReemplazo(aux);
if (aux == raiz)
{
raiz = reemplazo;
}
else if (eshijoIzq)
{
padre.hijoIzq = reemplazo;
}
else
{
padre.hijoDer = reemplazo;
}
reemplazo.hijoIzq = aux.hijoIzq;
}
return true;
nodoReemp)
Pgina 8
}
if (reemplazo != nodoReemp.hijoDer)
{
reemplazarPadre.hijoIzq = reemplazo.hijoDer;
reemplazo.hijoDer = nodoReemp.hijoDer;
}
//Console.WriteLine("El Nodo Reemplazo es:" + reemplazo);
return reemplazo;
}
}
//----------------------------------------------------------------------------------
Pgina 9
REFERENCIAS
MICROSOFT.(2012-2016) code.msdn.microsoft.com
(https://code.msdn.microsoft.com/windowsdesktop/Arbol-AVL-b5b61d9f)
SEBASTIAN GURIN (2004-2015) tldp.org
(http://es.tldp.org/Tutoriales/doc-programacion-arboles-avl/avl-trees.pdf)
ABRAN GARCIA (2011-2015) decsai.ugr.es
(http://decsai.ugr.es/~jfv/ed1/tedi/cdrom/docs/avl.html)
UNIVERIDAD FARANCISCO DE PAULA SANTANDER (2014-2016).
ingsistemas.ufps.edu(http://ingsistemas.ufps.edu.co/SEED/arbolavl.html)
Pgina 10