在二叉搜索树中插入时出现分段错误
Segmentation fault while inserting in Binary search tree
我正在尝试在C++中构建一个基本的二叉搜索树并遇到了一些问题,特别是当我尝试通过函数插入节点并读取时,它给了我分段错误。但是当我手动插入它时,相同的节点结构工作得很好。 BST插入的代码如下,很可能是罪魁祸首:
void BST::insert(Node* temproot,int val){
// std::cout << root->value <<std::endl;
if(!temproot){
Node* newNode = new Node;
newNode->value = val;
temproot = newNode;
std::cout << "Added Node with Value: " << val << std::endl;
return;
}
if(val<(temproot->value)){
std::cout << "LEFT" << std::endl;
insert(temproot->left, val);
}else{
std::cout << "RIGHT" << std::endl;
insert(temproot->right, val);
}
}
节点结构如下所示:
struct Node{
int value;
Node* left = nullptr, *right = nullptr;
};
BST 类如下所示:
class BST{
public:
Node* root= new Node;
BST(int val){
root->value = val;
}
void insert(Node*,int val);
void insertStart(int vasl){
Node* temproot = root;
insert(temproot, vasl);
}
void print(Node*);
void _print(){
print(root);
}
};
当我尝试按如下方式打印它时,它给了我分段错误:
void BST::print(Node* temp){
std::cout << temp->value << std::endl;
temp = temp->left;
std::cout << (temp->value) << std::endl;
}
我对C++有点陌生,并且几天来一直在努力定位它。有人可以帮助我弄清楚我在这里做错了什么吗?
该函数处理传递给它的指向节点的指针的副本。因此,更改副本不会影响原始指针。
您必须通过引用将指向节点的指针传递给函数。 函数声明可以如下所示
void insert(Node* &temproot,int val);
并称它为喜欢
void insertStart(int vasl){
insert( root, vasl );
}
没有中间指针。
并且您应该将此函数声明为类的 provate 静态函数。
并通过 nullptr 初始化数据成员根。
例如
class BST{
public:
Node* root = nullptr;
BST(int val){
insert( root, val );
}
void insertStart(int vasl){
insert( root, vasl);
}
void print(Node*);
void _print(){
print(root);
}
private:
static void insert(Node* &,int val);
};
基本上,SEGFAULT来自print
函数,它应该看起来像这样:
void BST::print(Node* temp){
if (nullptr == temp) {
return;
}
print(temp->left);
std::cout << temp->value << std::endl;
print(temp->right);
}
您的insert
函数应如下所示:
void BST::insert(Node *&temproot,int val){
if(nullptr == temproot){
Node* newNode = new Node;
newNode->value = val;
temproot = newNode;
return;
}
if(val < (temproot->value)){
insert(temproot->left, val);
}else{
insert(temproot->right, val);
}
}
现场查看
相关文章:
- 在某些循环内使用vector.push_back时出现分段错误
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- 如何解决gcc编译器优化导致的centos双编译器设置中的分段错误
- 当我的阵列太大时出现分段错误
- 分段错误当我试图运行程序时出错
- 在c++中初始化矩阵时出现分段错误(核心转储)
- 尝试使用集合函数时出现分段错误
- 我无法缩小此分段错误的原因
- g++的分段错误(在NaN上使用to_string两次时)
- 我是如何在这段代码中出现分段错误的
- 创建结构的数组时遇到分段错误
- 在c++中键入向量中的所有值后,得到分段错误(核心转储)
- 在 c++ 中实现 Trie 时出现分段错误
- 为什么 fstream 在打开带有格式的文件时会导致分段错误?
- 为什么我遇到分段错误?
- 动态类的分段错误(家庭作业问题)
- 分段错误 - 读取初始化指针的数组
- 如何摆脱C ++中的分段错误错误?
- 使用 CTYPE 时出现分段错误
- 为什么代码给出分段错误?