我在这个程序中面临分段错误。当我想出它时,流程似乎是正确的。请帮我查一下这个程序中的错误。
#include<iostream>
#include<cstdlib>
using namespace std;
struct node
{
int data;
struct node* left;
struct node* right;
};
typedef struct node* Node;
void insert(Node,int);
Node root = NULL;
int main()
{
insert(root,2);
insert(root,1);
insert(root,3);
cout<<root->data<<" "<<root->left->data<<" "<<root->right->data<<endl;
return 0;
}
void insert(Node nod,int val)
{
if(nod == NULL)
{
Node newnode = new(struct node);
newnode->data = val;
newnode->left = NULL;
newnode->right = NULL;
nod = newnode;
if(root == NULL)
{
root = newnode;
}
}
else if(nod->data > val)
{
insert(node->left,val);
}
else if(nod->data < val)
{
insert(nod->right,val);
}
}
答案 0 :(得分:5)
实际上没有任何内容设置root->left
或root->right
。对insert(node->left, val)
的调用没有按照您的想法执行。为了实际修改左右指针,需要将指针的地址传递给insert。即insert(&node->left, val)
,并更改insert
来处理它。
答案 1 :(得分:0)
void insert(Node &nod,int val)
{
if(nod == NULL) {
Node newnode = new(struct node);
newnode->data = val;
newnode->left = NULL;
newnode->right = NULL;
nod = newnode;
}
else if(nod->data > val)
{
insert(nod->left,val);
}
else if(nod->data < val)
{
insert(nod->right,val);
}
}