Это лучшее, что я могу придумать. Мне не совсем ясно, что именно делает код, но наличие комбинации указателей и копий объектов немного сбивает его с толку.
Ключевым моментом, который необходимо учитывать, является то, что Node.key
- это указатель (на Key
). Таким образом, чтобы передать их в key_comp(Key a, Key b)
, вам нужно прекратить ссылаться на него, тем самым преобразовав Key*
в Key
.
void insert_helper(int i, BStree bst, Node node)
{
if (i >= bst.size)
{
printf("Out of the range of the tree. \n");
return;
}
if (bst.is_free[i] == 1)
{
bst.tree_nodes[i] = node;
bst.is_free[i] = 0;
}
else if (key_comp(*(bst.tree_nodes[i].key), *(node.key)) > 0)
{
insert_helper(2*i, bst, node);
}
else if (key_comp(*(bst.tree_nodes[i].key), *(node.key)) < 0)
{
insert_helper(2*i+1, bst, node);
}
}
Если бы это был мой код, я бы изменил key_comp()
, чтобы взять пару указателей на Key
.