Void Delete - An - Element (Btree - PTR Root - PTR) (
Void Delete - An - Element (Btree - PTR Root - PTR) (
char buffer[81];
clrscr();
printf("\n\t\tBORRAR ELEMENTO");
printf("\n\t\t---------------");
printf("\n\BOLETA: ");
gets(buffer);
delete_btree(root_ptr, atol(buffer));
}
void get_string(char *string) {
char buffer[81];
gets(buffer);
if(buffer[0] != '\0')
strcpy(string, buffer);
}
void delete_btree(btree_ptr *root_ptr, keytype delete_key) {
btree_ptr node_ptr;
int index;
search_btree(*root_ptr, delete_key, &node_ptr, &index);
if(node_ptr == NULL)
return;
if(node_ptr->children[index] != NULL)
replace_element(&node_ptr, &index);
delete_element(root_ptr, node_ptr, index);
}
neighbor_ptr = parent_ptr->children[i+1];
size = neighbor_ptr->no_of_elements;
insert_element(root_ptr, node_ptr, parent_ptr->elements[i+1],
neighbor_ptr->children[size], node_ptr->children[0]);
if(node_ptr->children[0] != NULL)
node_ptr->children[0]->parent = node_ptr;
parent_ptr->elements[i+1] = neighbor_ptr->elements[size+1];
neighbor_ptr->no_of_elements -= 1;
return;
}
else if(i<size && parent_ptr->children[i+1]->no_of_elements > ORDER {
neighbor_ptr = parent_ptr->children[i+1];
size = node_ptr->no_of_elements;
insert_element(root_ptr, node_ptr, parent_ptr->elements[i],
node_ptr->children[size], neighbor_ptr->children[0]);
if(node_ptr->children[size+1] != NULL)
node_ptr->children[size+1]->parent= node_ptr;
parent_ptr->elements[i] = neighbor_ptr->elements[0];
delete_element(root_ptr, neighbor_ptr, 0);
return;
}
else {
if(i>0) {
neighbor_ptr = parent_ptr->children[i+1];
combine_nodes(neighbor_ptr, node_ptr, parent_ptr, i-1);
delete_element(root_ptr, parent_ptr, i-1);
return;
}
else {
neighbor_ptr = parent_ptr->children[i+1];
combine_nodes(node_ptr, neighbor_ptr, parent_ptr, i);
delete_element(root_ptr, parent_ptr, i);
return;
}
}
}