在二叉搜索树中插入节点时使用指针时出错
Error when working with pointers in insertion of a node in a binary search tree
所以我有以下代码:
#include <iostream>
#include <vector>
#include <cstdlib>
#include <ctime>
using namespace std;
struct Node
{
int value;
Node *left = NULL;
Node *right = NULL;
Node(int value)
{
this->value = value;
}
};
struct BST
{
Node *root = NULL;
void insert(int value)
{
cout<<"Inserting: "<<value<<endl;
Node *current = root;
while(current != NULL)
{
cout<<"YEA";
if(value > current->value)
{
current = current->right;
}
else current = current->left;
}
current = new Node(value);
cout<<"In the node val: "<<current->value<<endl;
if(root == NULL)
{
cout<<"Root is NULL but it shouldn'tn";
}
cout<<"Root val: "<<root->value<<endl;
}
void remove(int value)
{
Node *toReplace = NULL;
Node *toBeReplacedWith = NULL;
toReplace = search(value);
Node *current = toReplace->left;
if(current == NULL) toBeReplacedWith = toReplace->right;
else
{
while(current->right != NULL)
{
current = current->right;
}
toBeReplacedWith = current;
}
current->value = toBeReplacedWith->value;
current->left = toBeReplacedWith->left;
current->right = toBeReplacedWith->right;
free(toBeReplacedWith);
}
Node* search(int value)
{
Node *current = root;
while(current != NULL && current->value != value)
{
if(current->value > value) current = current->left;
else current = current->right;
}
if(current == NULL)
{
cout<<"The node didn't exist in the BST";
}
return current;
}
void traverse()
{
rec_traverse(root);
}
private:
void rec_traverse(Node * current)
{
if(current == NULL) return;
rec_traverse(current->left);
cout<<current->value<<endl;
rec_traverse(current->right);
}
};
int main()
{
BST tree;
for(int i = 0; i < 10; ++i)
{
tree.insert(i);
}
tree.traverse();
return 0;
}
有人能告诉我为什么当插入一个元素的根仍然指向NULL而不是一个节点实例?我甚至检查了当前指针的值,但由于某种原因,根仍然是NULL当它应该是第一个节点分配值
谁能告诉我为什么当插入一个元素的根仍然指向NULL
你的函数BST::insert(int value)
在任何情况下都不能修改root
。
这就是为什么root
仍然是NULL。
让你的方法工作的一种方法是让current
指向你想要修改的指针,而不是让current
持有该指针的的副本。
您正在更改current
指向的Node*
,但您从未触及根目录
如果root
为空,current = new Node(value);
应为root = new Node(value);
。
此外,除了这里的问题之外,如果您使用递归调用进行插入和删除,您的代码将会简单得多(并且您不必担心root
指向null的情况,因为它将被隐式处理)
相关文章:
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错
- 将链表转换为指针数组时出错
- 尝试将指针与结构一起使用时出错
- 将类指针类型转换为键时出错
- 如果我在指针中使用 ++ 操作数,我的值就会出错
- 在 Clang 中使用指向成员的指针时出错
- 编译包含指向模板函数的指针的初始值设定项列表时,gcc 出错,但 clang 不出错
- 通过在迭代指针键映射上出错来捕获非确定性
- 调用指向成员函数的指针时出错
- 通过具有矢量基址的指针读取矢量元素时出错
- 尝试返回指向 Visual Studio 中的动态数组的指针时出错C++
- 将空间分配给整数指针时出错
- GNU 链接器:如果头文件中的指针被声明为 NULL 和/或 extern,则出错
- 尝试将结构指针传递给类时出错
- 我设计了一个类并创建了基指针,但是当我尝试通过基指针访问派生函数时,它会出错
- 非标准语法;使用 '&' 创建指向成员的指针错误,将成员函数分配给向量时出错
- 指向 2D 数组的指针出错
- 删除vector中的指针出错
- 在c++函数中使用指针出错
- 指向数组参数的双指针出错