以递增顺序递归输出二叉树

Jos*_*hua 4 c++ recursion binary-tree

我目前关于如何输出我的二叉树的实现让我在g ++中遇到错误

Conditional jump or move depends on uninitialised value(s)
Run Code Online (Sandbox Code Playgroud)

我目前的实施是:

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

        s << p -> info; 

        output( s , p -> right );
    }
}
Run Code Online (Sandbox Code Playgroud)

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

ostream只是cout

错误信息是非常直接的,它不喜欢我让它"跑掉".

我的问题是双重的:

  1. 为什么这不合适?什么都没有改变,我不知道它会伤害什么.
  2. 这样做的正确方法是什么?

谢谢

par*_*mar 6

基本上这意味着一些节点对象没有初始化为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) {}

}
Run Code Online (Sandbox Code Playgroud)

这样,如果在构造时不知道左右节点,则将它们设置为null.

如果他们确实在Node的构造中已知,那么你不需要支付将rightleft设置为null然后再设置为其他内容的惩罚