0

我是 C++ 的初学者,需要帮助解决这个问题。它是一个基于树形结构的简单创建、读取和打印程序。

问题是,当我打印树时,它会显示由数字和字母组成的奇怪信息。它可能没有读取正确的内存数据。我编写了一个递归“创建”函数,它读取控制台输入并将它们添加到树结构中。该函数的工作原理如下:

  1. 读取控制台输入;
  2. 如果输入为空,则返回空;
  3. 否则将输入分配给节点值(在本例中为“信息”);
  4. 该函数“调用自身”并从左到右(从左分支向下,然后向上到根,然后在右分支向下)。

基本上,该函数在下降时检查左追随者,在上升时检查右追随者。

示例:像 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。

谢谢。

4

1 回答 1

2

我看到的输出的唯一问题是您正在打印r,这是一个指针。我想你的意思是r->info

于 2013-05-30T13:23:49.807 回答