Когда вы исправляете первый оператор if следующим образом, ваш код работает нормально!
// if (curr) {
if (curr == NULL) {
Вот код теста и вывод.
int main()
{
// 10
// / \
// 8 100
// /
// 50
Node* root = insert(nullptr, 10);
root = insert(root, 8);
root = insert(root, 100);
root = insert(root, 50);
std::cout << root->data << std::endl;
std::cout << root->left->data << std::endl;
std::cout << root->right->data << std::endl;
std::cout << root->right->left->data << std::endl;
}
$ ./a.out
10
8
100
50