二叉树的显示功能不能正常工作
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;
}
我为二叉树创建了一个程序。由于某种原因,我无法正确显示它。请帮我把它写成正确的格式。这是代码,如果还有其他错误,请告诉我。
#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;
}