Проблема заключается в вашей create()
функции-члене. В частности, проблема заключается в строке p = new node(x);
, поскольку p
является элементом данных и должен указывать на root дерева, но вы назначаете его новому узлу при каждом рекурсивном вызове и, таким образом, фактически теряете узлы. на предыдущих рекурсивных вызовах. Это приводит к неправильному / неожиданному выводу при вызове функции display
, поскольку p
не указывает на root дерева.
Правильная реализация
node *create(){
int x;
cout << "Enter data(-1 for NULL): ";
cin >> x;
if(x == -1)
return NULL;
node* new_node = new node(x); // Create new node
cout << "Enter left child: ";
new_node -> left = create(); // Assign left child
cout << "Enter right child: ";
new_node -> right = create(); // Assign right child
p = new_node; // Assign root of tree to p
return new_node;
}