/// <summary> /// /// </summary> /// <param name="valor"></param> /// <param name="Nodo"></param> public void AgregarYOrdenarNodo(Vehiculo valor, NodoB Nodo) { Nodo.Datos.Add(valor); Nodo.Datos.Sort((x, y) => x.CompareTo(y)); }
/// <summary> /// /// </summary> /// <param name="Nodo"></param> public void Separar(NodoB Nodo) { NodoB izq = new NodoB(); NodoB padreAux = new NodoB(); NodoB der = new NodoB(); CreandoNodo(izq, Nodo); CreandoNodo(der, Nodo); for (int i = 0; i < Nodo.Minimo; i++) { izq.Datos.Add(Nodo.Datos[i]); } for (int i = Nodo.Minimo + 1; i <= Nodo.Maximo; i++) { der.Datos.Add(Nodo.Datos[i]); } if (Nodo.Padre != null) //Si es cualquier hijo { PadreHijo(Nodo.Padre, izq); PadreHijo(Nodo.Padre, der); Nodo.Padre.Datos.Add(Nodo.Datos[Nodo.Minimo]); Nodo.Padre.Datos.Sort((x, y) => x.CompareTo(y)); int indice = 0; for (int i = 0; i < Nodo.Padre.Nodos.Count; i++) { if (Nodo.Padre.Nodos[i].Datos.Count > 4) { indice = i; break; } } if (Nodo.Nodos.Count > 0) { HijosDeHijos(Nodo, izq, 0, Nodo.Minimo); HijosDeHijos(Nodo, der, Nodo.Minimo + 1, Nodo.Maximo + 1); } Nodo.Padre.Nodos.RemoveAt(indice); Nodo.Padre.Nodos.Sort((x, y) => x.Datos[0].CompareTo(y.Datos[0])); Nodo = null; }//Si es la raiz y aun caben valores en el nodo else if (Nodo.Padre == null && Nodo.Nodos.Count < 5) { padreAux.Datos.Add(Nodo.Datos[Nodo.Minimo]); PadreHijo(Nodo, izq); PadreHijo(Nodo, der); Nodo.Datos.Sort((x, y) => x.CompareTo(y)); Nodo.Datos = padreAux.Datos; }//Si es raiz y no caben valores else if (Nodo.Padre == null && Nodo.Nodos.Count >= 5) { Vehiculo val = Nodo.Datos[Nodo.Minimo]; HijosDeHijos(Nodo, izq, 0, Nodo.Minimo); HijosDeHijos(Nodo, der, Nodo.Minimo + 1, Nodo.Maximo + 1); Nodo.Nodos.Clear(); PadreHijo(Nodo, izq); PadreHijo(Nodo, der); Nodo.Datos.Clear(); Nodo.Datos.Add(val); } }