分段错误“插入二进制搜索树”。 #

时间:2016-01-10 07:12:17

标签: c++ data-structures binary-search-tree

我正在编写一个函数来在 BST 中插入一个节点,但是分段错误。

    /*
    Node is defined as 

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

   */

    node * findPos(node * tree, int value){
       if(tree -> data > value){
             return findPos(tree -> left, value);
        }
       else if (tree -> data < value){
            return findPos(tree -> right, value);
       }

        return tree;
   }

   node * addNode(int value){

       struct node * temp =(struct node *)malloc(sizeof(struct node));
       temp->data = value;
       temp->left = NULL;
       temp -> right = NULL;
       return temp;
    }
    node * insert(node * root, int value)
    {
       node * ptr = root;

       if(ptr == NULL)
          return addNode(value);

        else if(ptr -> data > value){
            ptr->left = findPos(ptr -> left, value);
}

      else if(ptr -> data < value){
          ptr->right = findPos(ptr -> right, value);
       }  


       return root;
    }

我无法理解我正在尝试访问哪个非法内存,这会导致此错误。 请帮我解决一下这个。 在此先感谢:)

2 个答案:

答案 0 :(得分:0)

这里有两个问题:

  1. findPos应该处理树为NULL的情况。
  2. insert不应递归调用findPos。相反,它应该递归调用插入。像这样的东西(尚未测试过):

    node * insert(node * root, int value)
    {
        node * ptr = root;
        if(ptr == NULL)
            return addNode(value);
        else if(ptr -> data > value) {
            return insert(ptr -> left, value);
        } else if(ptr -> data < value) {
            return insert(ptr -> right, value);
        } else 
            return root;
     }
    

答案 1 :(得分:0)

谢谢你的帮助!!! 让程序正常工作

   node * addNode(int value){

    struct node * temp =(struct node *)malloc(sizeof(struct node));
    temp->data = value;
    temp->left = NULL;
    temp -> right = NULL;
    return temp;
  }
  node * insert(node * root, int value)
  {
      node * ptr = root;

     if(ptr == NULL)
       return addNode(value);

     else if(ptr -> data > value){
       ptr->left =  insert(ptr -> left, value);
     }

     else if(ptr -> data < value){
        ptr->right =  insert(ptr -> right, value);
     }  


    return root;
   }

* /

module.exports = {
  server: server,
  logger: logger
};