递归按升序输出二叉树

4

我目前实现的二叉树输出方法在g++中出现了错误,大致如下:

Conditional jump or move depends on uninitialised value(s)

我的当前实现方案是:

void Foo::output(ostream &s, const Node *p)
{
    if( p )
    {
        output( s , p -> left );

        s << p -> info; 

        output( s , p -> right );
    }
}

节点是一种基本结构,具有左右指针和一个整数信息变量。
输出流就是cout。
错误消息非常直接,它不喜欢我让它“跑掉”。
我的问题有两个方面:
1.为什么这样做是不恰当的?没有任何东西被改变,我不知道它会造成什么伤害。
2.正确的方法是什么?
谢谢。

它在抱怨哪一行代码?那段代码看起来没问题。此外,这是在编译/链接时还是运行时发生的? - paxdiablo
代码看起来没问题;问题很可能在填充节点的代码中。 - Kerrek SB
问题就像parapura rajkumar所建议的那样,在我的代码中我没有提供(很抱歉,我没有想到这是错误),我已经分配了一个新节点,但没有将它的左侧和右侧设置为空。 - Joshua
1个回答

6
基本上它意味着有些 Node 对象没有将 leftright 初始化为 null。
通常最好像这样定义您的节点:
class Node
{
    int info;
    Node* left;
    Node* right;

public:

    Node( int infoin , Node* leftin = NULL , Node* rightin = NULL )
     : info(infoin) , left(leftin) , right(rightin) {}

}

如果在构建时不知道左右节点,它们将被设置为 null。

如果在构建 Node 时已知左右节点,则不需要先将 rightleft 设置为 null,再设置为其他值。


我一看到这个,我就知道自己做了什么。非常感谢。 - Joshua

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接