二叉树的显示功能不能正常工作

Display function of Binary Tree is not working properly

我为二叉树创建了一个程序。由于某种原因,我无法正确显示它。请帮我把它写成正确的格式。这是代码,如果还有其他错误,请告诉我。

#include <iostream>
using namespace std;

class node
{
public:
    int data;
    node *left, *right;
    node(int x)
    {
        data = x;
        left = right = NULL;
    }
};
class tree
{
public:
    node *p;    
    node *create()
    {
        int x;
        cout << "Enter data(-1 for NULL): ";
        cin >> x;
        if(x == -1)
            return NULL;
        p = new node(x);
        cout << "Enter left child: ";
        p -> left = create();
        cout << "Enter right child: ";
        p -> right = create();
        return p;
    }
    void display1()
    {
        display(p);
    }
    void display(node *root)
    {
        if(root != NULL)
        {
            display(root -> left);
            cout << " " << root -> data << " ";
            display(root -> right);
        }
    }
};
int main()
{
    tree t;
    t.create();
    t.display1();
    return 0;
}

问题出在您的 create() 成员函数上。更具体地说,p = new node(x); 行是问题所在,因为 p 是一个数据成员,应该指向树的根,但您在每次递归调用时都将其分配给新节点,因此实际上丢失了先前递归调用的节点。当您调用 display 函数时,这会导致 wrong/unexpected 输出,因为 p 没有指向树的根。

正确实施

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;
}