예제 #1
0
        public nodob insertar(ataque nuevo /*, unit atacante_, unit defensor_, DateTime restante_, int cont_*/)
        {
            //buscar nodo de inserción
            nodob insert = buscarinsert(nuevo, raiz);

            if (insert == null)
            {
                raiz   = new nodob(grado, tipo);
                insert = raiz;
            }
            //realizar la inserción
            insert.insertar(nuevo, null, null);
            //si el nodo está lleno, dividir el nodo
            if (insert.llaves[grado - 1] != null)
            {
                nodob ret = insert.dividir();
                if (ret.padre == null)
                {
                    raiz = ret;
                }
                return(ret);
            }
            else
            {
                return(insert);
            }
        }
예제 #2
0
        //método de división de nodos hoja
        public nodob dividir()
        {//cuando el grado es impar, el valor del medio es llaves[grado/2]
         //metodo de prueba para llaves tipo int?

            /*int medio = llaves[grado/2].Value;
             * //hijo izquierdo
             * nodob izq = new nodob(grado);
             * //obtener lista de llaves izquierdas
             * for (int i = 0; i < grado / 2; i++) izq.llaves[i] = llaves[i];
             * //obtener lista de hijos izquierdos
             * for (int i = 0; i < grado / 2 + 1; i++) izq.hijos[i] = hijos[i];
             * //hijo derecho
             * nodob der = new nodob(grado);
             * //obtener lista de llaves derechas
             * for (int i = grado/2 +1; i < grado; i++) der.llaves[i] = llaves[i];
             * //obtener lista de hijos derechos
             * for (int i = grado/2 + 1; i < grado + 1; i++) der.hijos[i] = hijos[i];
             * //insertar los valores en el nodo padre
             * if(padre == null) padre = new nodob(grado);
             * padre.insertar(medio, izq, der);
             * return padre;*/
            //metodo para llaves tipo ataque
            ataque medio = llaves[grado / 2];
            //hijo izquierdo
            nodob izq = new nodob(grado, this.tipo);

            //obtener lista de llaves izquierdas
            for (int i = 0; i < grado / 2; i++)
            {
                izq.llaves[i] = llaves[i];
            }
            //obtener lista de hijos izquierdos
            for (int i = 0; i < grado / 2 + 1; i++)
            {
                izq.hijos[i] = hijos[i];
            }
            //hijo derecho
            nodob der = new nodob(grado, this.tipo);

            //obtener lista de llaves derechas
            for (int i = grado / 2 + 1; i < grado; i++)
            {
                der.llaves[i - (grado / 2) - 1] = llaves[i];
            }
            //obtener lista de hijos derechos
            for (int i = grado / 2 + 1; i < grado + 1; i++)
            {
                der.hijos[i - (grado / 2) - 1] = hijos[i];
            }
            //insertar los valores en el nodo padre
            if (padre == null)
            {
                padre = new nodob(grado, this.tipo);
            }
            padre.insertar(medio, izq, der);
            return(padre);
        }