C++ 从树结构获取数据
我有一个树形结构,我用下面的方法创建它。据我所知,这棵树是正确创建的。但是当我想从节点获取数据时,我会得到一些奇怪的acsii符号 我是如何设置数据的。假设它是空的。现在没关系。我在我的程序中有一个价值。这个函数会自我反馈,直到我到达数据的末尾C++ 从树结构获取数据,c++,data-structures,tree,C++,Data Structures,Tree,我有一个树形结构,我用下面的方法创建它。据我所知,这棵树是正确创建的。但是当我想从节点获取数据时,我会得到一些奇怪的acsii符号 我是如何设置数据的。假设它是空的。现在没关系。我在我的程序中有一个价值。这个函数会自我反馈,直到我到达数据的末尾 struct Node { char Data; Node* Left; Node* Right; }; Node maketree(0,s,split) { Node node; node.Data=' ';
struct Node {
char Data;
Node* Left;
Node* Right;
};
Node maketree(0,s,split)
{
Node node;
node.Data=' ';
Node n1=subsplit(0,s,splitingat);
Node n2= subsplit(1,splitingat+1,e);
node.Left=&n1;
node.Right=&n2;
return node;
}
这就是我从树中获取数据的方式
char decode(Node node,string text)
{
int currentindex=0;
Node sub=node;
{
}
if(text[currentindex]=='0')
{
sub=*sub.Left;
cout<<" x "<<sub.Data<<endl;
}
else if(text[currentindex]=='1')
{
sub=*sub.Right;
cout<<" x "<<sub.Data<<endl;
}
// cout<<sub.Data<<endl;
}
char解码(节点,字符串文本)
{
int currentindex=0;
节点子=节点;
{
}
如果(文本[currentindex]=“0”)
{
sub=*sub.Left;
cout问题的根源似乎在这里:
Node node;
node.Data=' ';
Node n1=subsplit(0,s,splitingat);
Node n2= subsplit(1,splitingat+1,e);
node.Left=&n1; // danger Will Robinson!
node.Right=&n2;
return node;
您正在获取本地、临时、自动变量的地址,并将它们存储在通过节点返回的指针中。一旦返回执行,n1
和n2
被销毁,并且节点。左
和节点。右
向左指向垃圾。您可以修复t他是这样说的:
Node* n1=new Node(subsplit(0,s,splitingat));
Node* n2=new Node(subsplit(1,splitingat+1,e));
// side note: probably better to have subsplit() return dynamically-allocated Node*s to avoid the copy
node.Left=n1;
node.Right=n2;
但如果其他地方也在做类似的事情,你可能仍然会遇到问题
类似地,在第二块代码中,您正在制作所检查的每个节点的副本,并将其存储到sub
中。让sub
成为节点*
可能更有意义
最后,为了避免内存管理问题(几乎)总之,在上面的所有内容中使用shared\u ptr
而不是Node*
。谢谢你的工作。我可以检查Node.Left==nill吗?我不太清楚这是否有效,但是检查null的语法应该是Node.Left==nullptr
。另外,如果你现在正在用new
分配节点
以前没有,记住,完成后你必须删除它们。除非你切换到共享\u ptr
:)谢谢你帮了我很多。这或多或少是一个静态的拼贴解码程序,所以内存分配是我的第二个担心。我需要先让它工作。