У вас почти это было, просто пара вещей в insertNodeinBST()
:
Вы должны создавать новый узел, только когда root
равен NULL
, в противном случае вы продолжаете создавать новый узел каждый раз, когда выпосетите новый узел, ища место для вставки:
//check if root is null
if (*root == NULL) {
node *new_n = (node*)malloc(sizeof(node));
new_n->leftChild = new_n->rightChild = NULL;
new_n->data = data;
*root = new_n;
}
Приведенный выше код заботится о вставке нового узла, поэтому вам не нужны другие назначения, измените:
} else if (data < (*root)->data) {
//if data is less than current root's data add it to left child
insertNodeinBST(data, &(*root)->leftChild);
(*root)->leftChild = new_n;
} else {
//if data is more than current root's data add it to right child
insertNodeinBST(data, &(*root)->rightChild);
(*root)->rightChild = new_n;
}
до
} else if (data < (*root)->data) {
//if data is less than current root's data add it to left child
insertNodeinBST(data, &(*root)->leftChild);
} else {
//if data is more than current root's data add it to right child
insertNodeinBST(data, &(*root)->rightChild);
}
рекурсивный вызов установит указатель на новый узел, когда он достигнет правильного пустого узла.