public void Rotaciones(Nodo <T> N_dad, Delegate Comparador) { int Fact_Equi = Det_FactEqui(N_dad.Hijoder, N_dad.Hijoizq); if (Fact_Equi == 2) { if (Det_FactEqui(N_dad.Hijoder.Hijoder, N_dad.Hijoder.Hijoizq) == -1) { //rotacion doble izquierda Rot_Simple_Derecha(N_dad.Hijoder, Comparador); if (N_dad == raiz) { Rot_Simple_Izquierda_Raiz(N_dad, Comparador); } else { Rot_Simple_Izquierda(N_dad, Comparador); } } else { //rotacion simple izquierda if (N_dad == raiz) { Rot_Simple_Izquierda_Raiz(N_dad, Comparador); } else { Rot_Simple_Izquierda(N_dad, Comparador); } } } if (Fact_Equi == -2) { if (Det_FactEqui(N_dad.Hijoizq.Hijoder, N_dad.Hijoizq.Hijoizq) == 1) { //rotacion doble derecha Rot_Simple_Izquierda(N_dad.Hijoizq, Comparador); if (N_dad == raiz) { Rot_Simple_Derecha_Raiz(N_dad, Comparador); } else { Rot_Simple_Derecha(N_dad, Comparador); } } else { //rotacion simple derecha if (N_dad == raiz) { Rot_Simple_Derecha_Raiz(N_dad, Comparador); } else { Rot_Simple_Derecha(N_dad, Comparador); } } } else { //No pasa nada oiga } }
public void Metodo_Eliminacion(int tipo, Nodo <T> Nodo_Borrar, Delegate Comparar) { int valor_com = (int)Comparar.DynamicInvoke(Nodo_Borrar.Padre.Valor, Nodo_Borrar.Valor); if (tipo == 0) { if (valor_com < 0) { Nodo_Borrar.Padre.Hijoder = null; } else { Nodo_Borrar.Padre.Hijoizq = null; } } if (tipo == 1) { if (Nodo_Borrar.Hijoder != null) { if (valor_com < 0) { Nodo_Borrar.Padre.Hijoder = Nodo_Borrar.Hijoder; } else { Nodo_Borrar.Padre.Hijoizq = Nodo_Borrar.Hijoder; } Nodo_Borrar.Hijoder.Padre = Nodo_Borrar.Padre; } else { if (valor_com < 0) { Nodo_Borrar.Padre.Hijoder = Nodo_Borrar.Hijoizq; } else { Nodo_Borrar.Padre.Hijoizq = Nodo_Borrar.Hijoizq; } Nodo_Borrar.Hijoizq.Padre = Nodo_Borrar.Padre; } } if (tipo == 2) { Nodo <T> Mayor_Izq = Obtener_MayorIzq(Nodo_Borrar.Hijoizq); Buscar_Nodo_Eliminar(Mayor_Izq.Padre, Mayor_Izq, Comparar); if (valor_com < 0) { Nodo_Borrar.Padre.Hijoder = Mayor_Izq; } else { Nodo_Borrar.Padre.Hijoizq = Mayor_Izq; } Mayor_Izq.Padre = Nodo_Borrar.Padre; Mayor_Izq.Hijoder = Nodo_Borrar.Hijoder; Mayor_Izq.Hijoizq = Nodo_Borrar.Hijoizq; Mayor_Izq.Hijoder.Padre = Mayor_Izq; Mayor_Izq.Hijoizq.Padre = Mayor_Izq; Mayor_Izq.Altura = Det_Altura(Mayor_Izq.Hijoder, Mayor_Izq.Hijoizq); } }