在平衡搜索树中插入元素

时间:2016-04-07 15:42:56

标签: c tree segmentation-fault binary-search-tree

我编写了以下代码,用于在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;
}

任何人都知道为什么会出现分段错误以及我该如何修复它?

谢谢

1 个答案:

答案 0 :(得分:2)

一个想法是,在main函数中使用它之前不要分配z并将其声明为NULL