Двоичное дерево поиска показывает пустое - PullRequest
0 голосов
/ 25 ноября 2018
struct node
{
   int data;
   node *left,*right;
};

  class bst
 {
 public:
    node *root;
    bst(){root = NULL;}
   void bst_insert(node*,int);
   void inorder(node*);
   };


void bst::bst_insert(node* x, int d) {
   if (x== NULL) {
      node* tmp = new node;
      tmp->data = d;
      tmp->left = NULL;
      tmp->right = NULL;
      x= tmp;
   }
   else if (d <= x->data)
      bst_insert(x->left,d);
   else
      bst_insert(x->right,d);
}

void bst::inorder(node* x) {
   if(x != NULL) {
      inorder(x->left);
      cout << x->data << " ";
      inorder(x->right);
   }
}

int main() {
   bst b;
   b.bst_insert(b.root,3);
   b.bst_insert(b.root,2);
   b.inorder(b.root);
}

bst - это класс с узлом-членом * root (инициализируется нулем в конструкторе)

Отображение двоичного дерева поиска по порядку всегда отображается пустым.

Что не так с кодом?

код выглядит нормально, но всегда bst не имеет значения и всегда отображается пустым, а root равен нулю !!!

1 Ответ

0 голосов
/ 26 ноября 2018

Никакой код нигде не устанавливает root на что-либо кроме NULL.Когда вы звоните inorder, он ничего не делает, поскольку root - это NULL.

b.bst_insert(b.root,3);

Поскольку root вначале NULL, это эквивалентно:

b.bst_insert(NULL,3);

Это не привязывает вновь созданный узел ни к чему.

...