从文件重建树

时间:2012-03-05 16:01:36

标签: c++

我在连接树的节点时遇到问题。在我的程序中,函数read()将首先执行load()函数。在read()函数中,我的外部文件中的所有数据都将存储在数组中,然后在load()函数中重建。变量dati已在全球范围内声明。我的问题出在load()函数上。非常感谢你的帮助。通过我对外部文件的数据预先安排的方式,我使用了"#"对于NULL节点。

void read()
{
    string dat1;
    fstream file;
    file.open("data.txt", ios::in);
    do
    {
       getline(file,dat1);
       dat[i]=dat1;
       i++;
    }while(!file.eof());
    file.close();
}

void load(node *root,int index)
{

    node *nNode;
    nNode=(node*)malloc(sizeof(node));
    nNode->yes=NULL;
    nNode->no=NULL;

    nNode->data=dat[index];

    if(index<i)
    {
        if(nNode->data!="#")
        {
            root=nNode;
            load(root->yes,index+1);
            load(root->no,index+1);
        }
        else
        {
            root=NULL;
            return;
        }
    }
}

1 个答案:

答案 0 :(得分:1)

嗯,有一个问题是你index实际上从未真正增加load()。另一个问题是你永远不会将root-&gt; yes或root-&gt; no分配给任何东西。而是分配pass-by-value参数root。也许您希望这也是参考。

你可能想要更像的东西:

// note that root and index are now pass-by-reference
void load(node &*root,int &index)
{
    ...
        index++;
        load(root->yes,index);
        index++;
        load(root->no,index);
    ...
}