public Hoja <T> rotacionDobDerecha(Hoja <T> valor) { Hoja <T> aux; valor.hojaDerecha = rotacionSimpIzquierda(valor.hojaDerecha); aux = rotacionSimpDerecha(valor); return(aux); }
public Hoja <T> rotacionSimpDerecha(Hoja <T> valor) { Hoja <T> aux = valor.hojaDerecha; valor.hojaDerecha = aux.hojaIzquierda; aux.hojaIzquierda = valor; valor.altura = Math.Max(obtenerFE(valor.hojaIzquierda), obtenerFE(valor.hojaDerecha)) + 1; aux.altura = Math.Max(obtenerFE(aux.hojaIzquierda), obtenerFE(aux.hojaDerecha)) + 1; return(aux); }
public int obtenerFE(Hoja <T> x) { if (x == null) { return(-1); } else { return(x.altura); } }
public void Insertar(T value) { cantidadHojas++; Hoja <T> nuevaHoja = new Hoja <T>(); nuevaHoja.value = value; nuevaHoja.hojaIzquierda = null; nuevaHoja.hojaDerecha = null; if (raiz == null) { raiz = nuevaHoja; } else { raiz = insertarAVL(nuevaHoja, raiz); } }
public void Busqueda(Hoja <T> r, ref Hoja <T> valorAbuscar, ref bool existe) { if (r.value.CompareTo(valorAbuscar.value) == 0) { valorAbuscar = r; existe = true; } else { if (r.hojaIzquierda != null) { Busqueda(r.hojaIzquierda, ref valorAbuscar, ref existe); } if (r.hojaDerecha != null) { Busqueda(r.hojaDerecha, ref valorAbuscar, ref existe); } } }
public AVL() { raiz = null; existe = false; }
public Hoja <T> insertarAVL(Hoja <T> nuevo, Hoja <T> ArbolSub) { Hoja <T> nuevoPadre = ArbolSub; if (nuevo.value.CompareTo(ArbolSub.value) < 0) { if (ArbolSub.hojaIzquierda == null) { ArbolSub.hojaIzquierda = nuevo; } else { ArbolSub.hojaIzquierda = insertarAVL(nuevo, ArbolSub.hojaIzquierda); if ((obtenerFE(ArbolSub.hojaIzquierda) - obtenerFE(ArbolSub.hojaDerecha) == 2)) { if (nuevo.value.CompareTo(ArbolSub.hojaIzquierda.value) < 0) { nuevoPadre = rotacionSimpIzquierda(ArbolSub); } else { nuevoPadre = rotacionDobIzquierda(ArbolSub); } } } } else if (nuevo.value.CompareTo(ArbolSub.value) > 0) { if (ArbolSub.hojaDerecha == null) { ArbolSub.hojaDerecha = nuevo; } else { ArbolSub.hojaDerecha = insertarAVL(nuevo, ArbolSub.hojaDerecha); if ((obtenerFE(ArbolSub.hojaDerecha) - obtenerFE(ArbolSub.hojaIzquierda) == 2)) { if (nuevo.value.CompareTo(ArbolSub.hojaDerecha.value) > 0) { nuevoPadre = rotacionSimpDerecha(ArbolSub); } else { nuevoPadre = rotacionDobDerecha(ArbolSub); } } } } else { // } if ((ArbolSub.hojaIzquierda == null) && (ArbolSub.hojaDerecha != null)) { ArbolSub.altura = ArbolSub.hojaDerecha.altura + 1; } else if ((ArbolSub.hojaDerecha == null) && (ArbolSub.hojaIzquierda != null)) { ArbolSub.altura = ArbolSub.hojaIzquierda.altura + 1; } else { ArbolSub.altura = Math.Max(obtenerFE(ArbolSub.hojaIzquierda), obtenerFE(ArbolSub.hojaDerecha)) + 1; } nuevoPadre.FE = (obtenerFE(ArbolSub.hojaIzquierda) - obtenerFE(ArbolSub.hojaDerecha)); return(nuevoPadre); }