public void insertarNodo(Nodo nuevoNodo) { Nodo resultado = OperacionesArbol.insertarNodo(nuevoNodo, raiz); if (resultado != null) { if (raiz.indice == false) { raiz = new Hoja(); raiz.nuevoIndice(); raiz.Nodos.Add(resultado); } else { raiz.Nodos.Add(resultado); raiz.Nodos = raiz.Nodos.OrderBy(x => x.nombre).ToList(); if (raiz.Nodos.Count() > Constants.ordenArbol) { Nodo promovido = OperacionesArbol.Promover(raiz); raiz = new Hoja(); raiz.nuevoIndice(); raiz.Nodos.Add(promovido); } } } }
public static Nodo Promover(Hoja hoja) { Nodo nodoaPromover; int posicionMedio = Constants.ordenArbol / 2; nodoaPromover = hoja.Nodos.ElementAt(posicionMedio); Hoja hijosIzq = new Hoja(); Hoja hijosDer = new Hoja(); if (hoja.indice) { hijosIzq.nuevoIndice(); hijosDer.nuevoIndice(); hoja.Nodos.RemoveAt(posicionMedio); } else { hijosIzq.nuevaHoja(); hijosDer.nuevaHoja(); } hijosIzq.Nodos = hoja.Nodos.Take(posicionMedio).ToList(); hijosDer.Nodos = hoja.Nodos.Skip(posicionMedio).ToList(); if (hoja.indice) { hijosIzq.hojaSiguiente = null; } else { hijosIzq.hojaSiguiente = hijosDer; } nodoaPromover.hijosIzq = hijosIzq; nodoaPromover.hijosDer = hijosDer; return(nodoaPromover); }