【发布时间】:2021-04-10 07:58:32
【问题描述】:
我正在研究二叉搜索树,我希望在节点的左侧放置较小的数字,在节点的右侧放置更大的数字,并输出完整的遍历。但是,我遇到了 SIGSEGV使用指针时。
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
struct node{
node* left;
node* right;
int key;
};
node* root;
void createnode(int data,node* ptr);
void traversal(node* ptr);
int main(void)
{
srand(time(NULL));
int j;
root = NULL;
for(j=1;j<=16;j++){
createnode(rand(),root);
}
root=NULL;
traversal(root);
return 0;
}
void createnode(int data,node* ptr){
if(ptr==NULL){
ptr->left=new node;
ptr->right=new node;
ptr->key=data;
ptr->left=NULL;
ptr->right=NULL;
}
else if(data<ptr->key){
createnode(data,ptr->left);
}
else if(data>ptr->key){
createnode(data,ptr->right);
}
else{
cout<<"error";
}
}
void traversal(node* ptr){
if(ptr->left==NULL&&ptr->right==NULL){
cout<<ptr->key;
}
else if(ptr->left!=NULL){
traversal(ptr->left);
cout<<ptr->key;
}
else if(ptr->right!=NULL){
traversal(ptr->right);
cout<<ptr->key;
}
}
另外,我不确定是否声明节点*左,节点*右,如果是,我应该在哪里声明。谢谢。
【问题讨论】:
-
if(ptr==nullptr) { ptr->...;-- 你不能取消引用nullptr -
@PaulMcKenzie 我已经用 NULL 替换了所有 nullptr,我还能做什么,tks
-
@930727fre 使用
NULL而不是nullptr不会改变任何东西。无论使用什么空指针常量使其为空,都不能取消引用空指针。您的root指针没有指向任何东西,因此任何使用它所指向的东西的尝试都是无效的。 -
SEGV 为您提供一个核心文件和/或在它发生的地方停止调试器。您是否尝试过使用调试器检查核心文件,或者在调试器中运行时重现错误?您有很多尚未查看的可用信息。
标签: c++ pointers binary-tree