El primer paso en la inserción de un registro es encontrar la hoja y posición donde debe quedar el nuevo registro --este proceso se realiza con la fución ya dicutida search_leaf-- y verificamos el número de elementos en el nodo. Si el número de elementos es menor que el orden del árbol, entonces insertamos el registro con la función node_register que explicaremos más adelante. En caso contrario, si el número de elementos es igual al orden del nodo, entonces dividimos el nodo e insertamos el nuevo registro en el nodo que le corresponda (en la división), conectamos las nuevas hojas, y actualizamos la raíz del árbol. La función queda de la siguiente forma:
/* Inserta en el arbol un nuevo registro */ /* [ABRIL-97] */ /* AMILCAR MENESES VIVEROS */ node *insert_register(node *root, Bkey k, Bregister *r) { int i, f; Bkey mkey; node *ph1, *ph2, *rf; rf = root; if ((ph1=search_leaf(root,k,&i))==NULL) { printf("\n Error!, no existe arbol\n"); exit(1); } if (ph1->nKeys < (ORDER-1)) insnoderegister(ph1,i,r,k); else { ph2 = divide(ph1, k, i, &f, &mkey); i = nodesearch(ph2, k); insnoderegister(ph2, i, r, k); conect(ph1, ph2); rf = search_root(ph1); } return rf; }Se aprecia que la función insert_register tiene 3 parámetros de entrada: el nodo raíz root, la llave k y el apuntador al registro correspondiente r. Además regresa el apuntador a la raíz del árbol, esto es porque al conservar el balance del árbol, la raíz puede puede cambiar si se altera la profundidad del B+. La función insert_register se auxilia de 5 rutinas: insnoderegister, divide, nodesearch, concect y search_root que explicamos a continuación, exepto nodesearch que ya se ha discutido previamente.