public NodoAvl rotacionID(NodoAvl n, NodoAvl n1) { NodoAvl n2; n2 = n1.der; n.izq = n2.der; n2.der = n; n1.der = n2.izq; n2.izq = n1; //refresh factores de equilibrio if (n2.getFe() == 1) { n1.setFe(-1); } else { n1.setFe(0); } if (n2.getFe() == -1) { n.setFe(1); } else { n.setFe(0); } n2.setFe(0); return(n2); }
public NodoAvl equilibrar2(NodoAvl n, ref int altura) { NodoAvl n1; switch (n.getFe()) { case -1: n1 = n.izq; if (n1.getFe() <= 0) { if (n1.getFe() == 0) { altura = 0; } n = rotacionSimpleIzq(n, n1); } else { n = rotacionID(n, n1); } break; case 0: n.setFe(-1); altura = 0; break; case 1: n.setFe(0); break; } return(n); }
public NodoAvl equilibrar1(NodoAvl n, ref int altura) { NodoAvl n1; switch (n.getFe()) { case -1: n.setFe(0); break; case 0: n.setFe(1); altura = 0; break; case 1: n1 = n.der; if (n1.getFe() >= 0) { if (n1.getFe() == 0) { altura = 0; } n = rotacionSimpleDer(n, n1); } else { n = rotacionDI(n, n1); } break; } return(n); }
public NodoAvl rotacionSimpleIzq(NodoAvl n, NodoAvl n1) //simple izquierdo II { n.izq = n1.der; n1.der = n; if (n1.getFe() == -1) { n.setFe(0); n1.setFe(0); } else { n.setFe(-1); n1.setFe(1); } return(n1); }
public NodoAvl rotacionSimpleDer(NodoAvl n, NodoAvl n1) //simple Derecho DD { n.der = n1.izq; n1.izq = n; //refresh factor de equilibrio if (n1.getFe() == 1) { n.setFe(0); n1.setFe(0); } else { n.setFe(1); n1.setFe(-1); } return(n1); }
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); }