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); } }
//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); }