我是 C++ 的初学者,需要帮助解决这个问题。它是一个基于树形结构的简单创建、读取和打印程序。
问题是,当我打印树时,它会显示由数字和字母组成的奇怪信息。它可能没有读取正确的内存数据。我编写了一个递归“创建”函数,它读取控制台输入并将它们添加到树结构中。该函数的工作原理如下:
- 读取控制台输入;
- 如果输入为空,则返回空;
- 否则将输入分配给节点值(在本例中为“信息”);
- 该函数“调用自身”并从左到右(从左分支向下,然后向上到根,然后在右分支向下)。
基本上,该函数在下降时检查左追随者,在上升时检查右追随者。
示例:像 1->root, 2->left follower, 3->right follower 这样的树的读法如下:1,2,0,0,3,0,0。前两个 0 分配 NULL 值节点“2”的追随者,从而使函数返回根并沿右分支向下。
更复杂的树,如:1->root,2->“1”的左边,4->“2”的左边,5->“4”的右边,3->“1”的右边;7->“3”的左侧,读法如下:1,2,4,0,5,0,0,0,3,7,0,0,0。
“read”函数读取left->root->right,与“create”函数的工作方式相同。
这是我的代码:
#include<iostream>
using namespace std;
struct nod
{
int info;
nod *left,*right;
} *tree;
nod * create()
{
int n;
nod*r;
cin>>n;
if(n==0)
return NULL;
r=new nod;
r->info=n;
r->left=create();
r->right=create();
return r;
}
void read(nod *r)
{
if(r)
{
read(r->left);
cout<<r<<" ";
read(r->right);
}
}
int main()
{
tree =new nod;
tree=create();
read(tree);
return 0;
}
输入是这样完成的:1,2,3,0,4,0,0,5,0,0,6,7,0,0,0。
谢谢。