В вопросе слишком мало информации, чтобы быть уверенным, поэтому мы должны догадаться. Я думаю, что наиболее вероятный виновник в том, что element
может быть неправильно инициализирован. Это может означать любое из следующего:
element
не указывает на действительный экземпляр node
(неинициализированный указатель, висячий указатель и т. Д.).
element->bk
имеет значение NULL или недопустимый указатель.
element->left
не равно NULL при входе в функцию.
element->right
не равно NULL при входе в функцию.
Кстати, функция намного сложнее, чем должна быть:
node* insert(node *root, node *element) {
if (root == NULL)
return element; // Inserting into an empty tree.
else {
if (element->bk->key < root->bk->key) {
printf("Inserting in left position.\n");
root->left = insert(root->left, element);
} else {
printf("Inserting in right position.\n");
root->right = insert(root->right, element);
}
// Return the root pointer of the updated tree.
return root;
}
}
Обратите внимание, что два оператора if (root->X != NULL)
и два предложения else
не нужны. Вызов функции с помощью root==NULL
будет делать правильно, благодаря проверке if (root==NULL)
вверху.