Рекурсивно вывести двоичное дерево в порядке возрастания - PullRequest
4 голосов
/ 15 ноября 2011

Моя текущая реализация того, как выводить мое двоичное дерево, выдает мне ошибку в 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 );
    }
}

Узелявляется базовой структурой, с указателем влево и вправо и целочисленной информационной переменной.

ostream просто cout

Сообщение об ошибке очень прямолинейно, мне не нравится, что япусть он «убежит».

У меня двоякий вопрос:

  1. Почему это неправильно?Ничего не меняется, я не знаю, что это может навредить.
  2. Как правильно это сделать?

Спасибо

1 Ответ

6 голосов
/ 15 ноября 2011

В основном это означает, что некоторые Узел объекты не имеют left и right , инициализированные нулем.

Обычно хорошей идеей будет определить ваш узел примерно так

class Node
{
    int info;
    Node* left;
    Node* right;

public:

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

}

Таким образом, если левый и правый узлы не известны во время построения, они устанавливаются в ноль.

И если они действительно известны при построении Узла , вы не платите штраф за установку вправо и влево в ноль, а затем в другое

...