C++ 二进制搜索树错误

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

我正在实现一个二叉树并进行一些插入并搜索其中一个插入的值。 但是我收到内存错误提示“Thread 1: EXC_BAD_ACCESS(code=1, address=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 并将它们打印出来以测试二叉搜索树函数是否完成了搜索工作,但如您所见,我遇到了错误。虽然它编译。<​​/p>

  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.

最佳答案

您的insertion() 代码是错误的。你可能打算使用

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

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

关于C++ 二进制搜索树错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18413546/

相关文章:

c++ - 模拟 C++ 标准库

c++ - lambda 函数是否需要任何头文件?

java - 如何从操作系统分配内存而不是增加 JVM 的堆大小?

C++ 错误 LNK2019 : binary search tree

c++ - 初始化列表问题,重点是std vector

c++ - 当我 "re-initialize"指针时会发生什么

c++ - 在 C++ 函数中分配大型本地内存的最佳方法

memory - RabbitMQ + 内存限制

python - 返回一个包含内部节点数和叶子数的元组

c++ - 如何按级别顺序构造二叉树