我在连接树的节点时遇到问题。在我的程序中,函数read()
将首先执行load()
函数。在read()
函数中,我的外部文件中的所有数据都将存储在数组中,然后在load()
函数中重建。变量dat
和i
已在全球范围内声明。我的问题出在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;
}
}
}
答案 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);
...
}