在二进制搜索树中插入不起作用

时间:2016-02-03 11:54:15

标签: c++ data-structures

我是编程新手,我正在尝试插入二进制搜索树程序。我的代码是:

struct Node* insert(struct Node* node, int key)
{
   if (node == NULL) return newNode(key);
   if (key < node->key)
    node->left  = insert(node->left, key);
   if (key > node->key)
    node->right = insert(node->right, key);
   return node;
}

但它没有产生正确的输出。给出的解决方案是:

struct Node* insert(struct Node* node, int key)
{
    if (node == NULL) return newNode(key);
    if (key < node->key)
        node->left  = insert(node->left, key);
    else if (key > node->key)
        node->right = insert(node->right, key);
    return node;
}

else如何影响插入?

1 个答案:

答案 0 :(得分:0)

首先,要摆脱这些问题,请始终自行运行代码。

 struct Node* insert(struct Node* node, int key)
  {
    if (node == NULL) return newNode(key);
    if (key < node->key) // Stmt 1
     node->left  = insert(node->left, key);
    if (key > node->key) //Stmt 2
     node->right = insert(node->right, key);
    return node;
  }

这里你需要正确理解递归。在您的代码中,编译器将同时使用stmt1和stmt2。

假设编译器对递归左节点执行stmt1 3次递归,则每次对每个右节点执行stmt2。但是如果您在else中使用stmt2,那么您的代码将不会为stmt1的递归部分执行stmt2。如果您使用stmt1,它只会执行stmt2else中的一个。