C++ 从树结构获取数据

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=' ';

我有一个树形结构,我用下面的方法创建它。据我所知,这棵树是正确创建的。但是当我想从节点获取数据时,我会得到一些奇怪的acsii符号

我是如何设置数据的。假设它是空的。现在没关系。我在我的程序中有一个价值。这个函数会自我反馈,直到我到达数据的末尾

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
:)谢谢你帮了我很多。这或多或少是一个静态的拼贴解码程序,所以内存分配是我的第二个担心。我需要先让它工作。