Пример #1
0
 public void entradaIndice(string nombreArchivo, Hoja izquierdo, Hoja derecho)
 {
     nombre   = nombreArchivo;
     cluster  = 0;
     hijosIzq = izquierdo;
     hijosDer = derecho;
 }
Пример #2
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);
                    }
                }
            }
        }
Пример #3
0
        public static void recorridoRecursivo(Hoja hoja)
        {
            if (hoja.indice == true)
            {
                foreach (Nodo n in hoja.Nodos)
                {
                    Console.Write("\n");

                    string nombre = n.nombre;

                    Console.WriteLine(nombre);


                    Console.Write("\tIzquierda\n");

                    recorridoRecursivo(n.hijosIzq);


                    Console.Write("\tDerecha\n");
                    recorridoRecursivo(n.hijosDer);

                    Console.WriteLine("----------------------------");
                }
            }
            else
            {
                Console.Write("\t");
                foreach (Nodo n in hoja.Nodos)
                {
                    string nombre = n.nombre;
                    Console.Write(nombre + " ");
                }
                Console.Write("\n");
            }
        }
Пример #4
0
 public void entradaHoja(string nombreArchivo, ushort clusterArchivo, byte esRoot)
 {
     nombre    = nombreArchivo;
     cluster   = clusterArchivo;
     ubicacion = esRoot;
     hijosIzq  = null;
     hijosDer  = null;
 }
Пример #5
0
        public static List <Nodo> buscarNombre(string nombre, Hoja hoja)
        {
            if (hoja.indice == true)
            {
                int tamanioHoja = hoja.Nodos.Count();
                for (int i = 0; i < tamanioHoja; i++)
                {
                    Nodo nodoActual = hoja.Nodos.ElementAt(i);

                    int c = string.Compare(nombre, nodoActual.nombre);
                    if (c == -1)
                    {
                        List <Nodo> encontrado = buscarNombre(nombre, nodoActual.hijosIzq);
                        return(encontrado);
                    }
                    else
                    {
                        if (i != tamanioHoja - 1)
                        {
                            Nodo nodoSiguiente = hoja.Nodos.ElementAt(i + 1);
                            c = string.Compare(nombre, nodoSiguiente.nombre);
                            if (c == -1)
                            {
                                List <Nodo> encontrado = buscarNombre(nombre, nodoActual.hijosDer);
                                return(encontrado);
                            }
                            else
                            {
                                List <Nodo> encontrado = buscarNombre(nombre, nodoSiguiente.hijosDer);
                                return(encontrado);
                            }
                        }
                        else
                        {
                            List <Nodo> encontrado = buscarNombre(nombre, nodoActual.hijosDer);
                            return(encontrado);
                        }
                    }
                }
            }
            else
            {
                List <Nodo> encontrado = hoja.Nodos.Where(x => x.nombre.Contains(nombre)).ToList();
                return(encontrado);
            }
            return(null);
        }
Пример #6
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);
        }
Пример #7
0
 public static void imprimirArbol(Hoja raiz)
 {
     recorridoRecursivo(raiz);
     Console.Write("\n");
 }
Пример #8
0
        public static Nodo insertarNodo(Nodo nuevoNodo, Hoja hoja)
        {
            if (hoja.indice == false)
            {
                hoja.Nodos.Add(nuevoNodo);
                hoja.Nodos = hoja.Nodos.OrderBy(x => x.nombre).ToList();
                if (hoja.Nodos.Count() > Constants.ordenArbol)
                {
                    Nodo promovido = Promover(hoja);
                    return(promovido);
                }
                else
                {
                    return(null);
                }
            }
            else //si la raiz actual es un indice
            {
                int tamanioHoja = hoja.Nodos.Count();
                for (int i = 0; i < tamanioHoja; i++)
                {
                    Nodo nodoActual = hoja.Nodos.ElementAt(i);

                    int c = string.Compare(nuevoNodo.nombre, nodoActual.nombre);
                    if (c == -1)
                    {
                        Nodo promovido = insertarNodo(nuevoNodo, nodoActual.hijosIzq);
                        if (promovido != null)
                        {
                            nodoActual.hijosIzq = promovido.hijosDer;
                        }
                        return(promovido);
                    }
                    else
                    {
                        if (i != tamanioHoja - 1)
                        {
                            Nodo nodoSiguiente = hoja.Nodos.ElementAt(i + 1);
                            c = string.Compare(nuevoNodo.nombre, nodoSiguiente.nombre);
                            if (c == -1)
                            {
                                Nodo promovido = insertarNodo(nuevoNodo, nodoActual.hijosDer);
                                if (promovido != null)
                                {
                                    nodoActual.hijosDer    = new Hoja();
                                    nodoActual.hijosDer    = promovido.hijosIzq;
                                    nodoSiguiente.hijosIzq = promovido.hijosDer;
                                }
                                return(promovido);
                            }
                            else
                            {
                                Nodo promovido = insertarNodo(nuevoNodo, nodoSiguiente.hijosDer);
                                if (promovido != null)
                                {
                                    nodoSiguiente.hijosDer = new Hoja();
                                    nodoSiguiente.hijosDer = promovido.hijosIzq;
                                }
                                return(promovido);
                            }
                        }
                        else
                        {
                            Nodo promovido = insertarNodo(nuevoNodo, nodoActual.hijosDer);
                            if (promovido != null)
                            {
                                nodoActual.hijosDer = new Hoja();
                                nodoActual.hijosDer = promovido.hijosIzq;
                            }
                            return(promovido);
                        }
                    }
                }
                return(null);
            }
        }
Пример #9
0
 public ArbolBPlus()
 {
     raiz = new Hoja();
     raiz.nuevaHoja();
 }
Пример #10
0
 public void nuevaHoja()
 {
     indice        = false;
     Nodos         = new List <Nodo>();
     hojaSiguiente = null;
 }
Пример #11
0
 public void nuevoIndice()
 {
     indice        = true;
     Nodos         = new List <Nodo>();
     hojaSiguiente = null;
 }