Esempio n. 1
0
        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);
                    }
                }
            }
        }
Esempio n. 2
0
        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);
        }