我目前关于如何输出二叉树的实现在 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 );
    }
}

Node 是一个基本结构,具有左右指针和整数信息变量。

ostream 只是 cout

错误消息非常直接,它不喜欢我让它“跑掉”。

我的问题是双重的:
  • 为什么这是不正确的?什么都没有改变,我不知道它会伤害什么。
  • 这样做的正确方法是什么?

  • 谢谢

    最佳答案

    基本上这意味着一些 节点 对象没有 初始化为空。

    通常,像这样定义节点是个好主意

    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。

    如果它们确实在 节点 的构建中已知,则您无需支付将 设置为 null 然后设置为其他内容的惩罚

    关于c++ - 按升序递归输出二叉树,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8130785/

    10-09 09:05