public NodoAvl borrarEnAvl(NodoAvl raiz, string nickname, ref int altura) { if (raiz == null) { altura = 0; } else if (string.Compare(nickname, raiz.getNickname()) == -1) { raiz.izq = borrarEnAvl(raiz.izq, nickname, ref altura); if (altura != 0) { raiz = equilibrar1(raiz, ref altura); } } else if (string.Compare(nickname, raiz.getNickname()) == 1) { raiz.der = borrarEnAvl(raiz.der, nickname, ref altura); if (altura != 0) { raiz = equilibrar2(raiz, ref altura); } } else { //Nodo Encontrado NodoAvl aux; aux = raiz; if (aux.izq == null) { raiz = aux.der; altura = 1; } else if (aux.der == null) { raiz = aux.izq; altura = 1; } else { reemplazar(ref aux, ref aux.izq, ref altura); if (altura != 0) { raiz = equilibrar1(raiz, ref altura); } } } return(raiz); }
public NodoAvl insertarAvl(NodoAvl raiz, NodoAvl nuevo, ref int h) { NodoAvl n1; if (raiz == null) { raiz = nuevo; h = 1; } else if (string.Compare(nuevo.getNickname(), raiz.getNickname()) == -1) { raiz.izq = insertarAvl(raiz.izq, nuevo, ref h); //reduce 1 al fe porque crecio en la rama izquierda if (h != 0) { switch (raiz.getFe()) { case 1: raiz.setFe(0); h = 0; break; case 0: raiz.setFe(-1); break; case -1: n1 = raiz.izq; if (n1.getFe() == -1) { raiz = rotacionSimpleIzq(raiz, n1); } else { raiz = rotacionID(raiz, n1); } h = 0; break; } } } else if (string.Compare(nuevo.getNickname(), raiz.getNickname()) == 1) { raiz.der = insertarAvl(raiz.der, nuevo, ref h); if (h != 0) { switch (raiz.getFe()) { case 1: n1 = raiz.der; if (n1.getFe() == 1) { raiz = rotacionSimpleDer(raiz, n1); } else { raiz = rotacionDI(raiz, n1); } h = 0; break; case 0: raiz.setFe(1); break; case -1: raiz.setFe(0); h = 0; break; } } } else { h = 0; } return(raiz); }