二进制搜索树 - 插入

时间:2015-02-19 10:18:36

标签: c++

我正在尝试编写一个将值插入二叉树的函数。到目前为止我得到了这个:

struct node
{
     int data;
     struct node* left;
     struct node* right;
};


struct node* newNode(int data)
{
     struct node* node = (struct node*)
     malloc(sizeof(struct node));
     node->data = data;
     node->left = NULL;
     node->right = NULL;

     return(node);
}

// Insert
struct node* insert (struct node* node, int data)
{
    if (node == NULL)
        node->data=data;
    else 
    {
      if (data < node->data)
         node->left = insert(node->left, data);
      else
         node->right = insert(node->right ,data);
    }
    node->left = NULL;
    node->right = NULL;
    return node;
}

但每次我跑它,它就会停止工作。因此我认为插入功能一定有问题。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

据我所知,有两个问题:

struct node* insert (struct node* node, int data)
{
    if (node == NULL)
        node->data=data;  // 1: Dereferencing a null pointer is a bad idea.
    else 
    {
      if (data < node->data)
         node->left = insert(node->left, data);
      else
         node->right = insert(node->right ,data);
    }

    // 2: Throwing away the subtrees is also a bad idea.
    node->left = NULL;
    node->right = NULL;
    return node;
}

您应该使用newNode在树中创建节点,并保留子树:

struct node* insert (struct node* node, int data)
{
    if (node == NULL)
        node = newNode(data);
    else 
    {
      if (data < node->data)
         node->left = insert(node->left, data);
      else
         node->right = insert(node->right ,data);
    }
    return node;
}
相关问题