C ++二进制搜索树错误

时间:2013-08-24 00:01:00

标签: c++ memory-management binary-tree binary-search-tree

我正在实现二叉树并进行一些插入并搜索其中一个插入的值。 但我收到内存错误说“线程1:EXC_BAD_ACCESS(代码= 1,地址= 0x0)

我的二叉树如下所示

  struct node
  {
        int data;
        node* left = nullptr;
        node* right = nullptr;

        explicit node(int data) : data(data) {};
  };

我的插入功能如下所示

  node* insertion(node* root, int value)
  {
        if (root != nullptr) return new node(value);

        if (value < root->data)
        {
              root->left = insertion(root->left, value);
        }
        else
        {
              root->right = insertion(root->right, value);
        }

        return root;
  }

我的二进制搜索功能如下所示

  node* binary_search(node* root, int value)
  {
        if (root == nullptr || root->data == value)
        {
              return root;
        }

        if (value < root->data) return binary_search(root->left, value);
        else return binary_search(root->right, value);
  }

所以在main函数中,我向root插入了几个值 并尝试找到一个值13并将其打印出来测试二进制搜索树功能是否可以搜索其工作,但正如您所看到的那样,我收到了错误。它编译了。

  struct node* root = new node(NULL);
  root->data = 10;
  root = insertion(root, 1);
  root = insertion(root, 11);
  root = insertion(root, 2);
  root = insertion(root, 12);
  root = insertion(root, 3);
  root = insertion(root, 13);
  root = insertion(root, 5);
  root = insertion(root, 20);
  root = insertion(root, 7);
  root = insertion(root, 15);

  auto temp1 = binary_search(root, 13);
  cout << "Did you find 13? : " << temp1->data << endl; 
   // Here I am getting that error.

1 个答案:

答案 0 :(得分:1)

您的insertion()代码错误。你可能想要使用

if (root == nullptr) { ... }

原样,您的树只包含一个节点!然后,当您搜索您的值时,它找不到该值并返回nullptr。然后取消引用该值,因为您不检查是否找到了值但是假设它在那里。