我编写了以下代码,用于在BST中插入元素。它编译没有错误,但当我尝试运行它时,我得到分段错误。
我试图只用一个节点和一个int而不是2个节点来重写函数,但是我仍然遇到了分段错误。
代码:
#include <stdio.h>
#include <stdlib.h>
struct node {
int key_value;
struct node *left;
struct node *right;
struct node *parent;
struct node *root;
};
void treeinsert( struct node *tree, struct node *z ) {
struct node *y = NULL;
struct node *x = tree->root;
while( x!=NULL ) {
y=x;
if( z->key_value < x->key_value ) {
x=x->left;
} else {
x=x->right;
}
}
z->parent = y;
if( y==NULL ) {
tree->root = z;
} else if(z->key_value < y->key_value) {
y->left = z;
} else {
y->right = z;
}
}
int main() {
struct node *tree = 0;
struct node *z = NULL;
int s[5] = {4,2,7,1,9}, i;
for( i=0; i<5; i++ ) {
z->key_value = s[i];
treeinsert(tree, z);
}
return 0;
}
任何人都知道为什么会出现分段错误以及我该如何修复它?
谢谢
答案 0 :(得分:2)
一个想法是,在main函数中使用它之前不要分配z
并将其声明为NULL