c二叉搜索树中的分段错误11

巴黎式

尝试打印二叉树中的节点时出现分段错误。看起来是第三个节点的问题。我已经在谷歌和堆栈溢出搜索了几个小时,但我不明白问题是什么。我正在尝试用 C 语言自学数据结构,而且我还是个新手,所以我可能会以一种不受欢迎的方式做一些事情。

#include <stdio.h>
#include <stdlib.h>

typedef struct node
{
  int data;
  struct node *left;
  struct node *right;
} Node;

typedef struct
{
  Node *root;
} BinarySearchTree;

void printInOrder(Node *);
void addNode(Node *, Node *);

int main (void)
{
  BinarySearchTree tree;
  BinarySearchTree *tree_ptr = &tree; 
  Node n1, n2, n3;

  n1.data = 1;
  n2.data = 2;
  n3.data = 3;

  Node *n1_ptr = &n1;
  Node *n2_ptr = &n2;
  Node *n3_ptr = &n3;

  tree_ptr->root = n1_ptr;

  addNode(tree_ptr->root, n2_ptr);
  addNode(tree_ptr->root, n3_ptr);
  printInOrder(tree_ptr->root);
}

void printInOrder(Node *root)
{
  if (root == NULL)
  {
    return;
  } else
  {
    printInOrder(root->left);
    printf("%i\n", root->data);
    printInOrder(root->right);
  }
}

void addNode(Node *root, Node *node)
{
  if (node->data < root->data)
  {
    if (root->left == NULL)
    {
      root->left = node;
    } else
    {
      addNode(root->left, node);
    }
  } 

  else if (node->data > root->data)
  {
    if (root->right == NULL)
    {
      root->right = node;
    } else
    {
      addNode(root->right, node);
    }
  }
}

输出:

1
2
Segmentation fault: 11

除了第三个节点似乎没有任何问题。如果我注释掉添加第二个节点的行,我会得到同样的错误(显然只打印了 1 个)。

4386427

您的初始化未完成

  n1.data = 1;
  n2.data = 2;
  n3.data = 3;

还应该设置指针

  n1.data = 1;
  n1.left = NULL;
  n1.right = NULL;

  n2.data = 2;
  n2.left = NULL;
  n2.right = NULL;

  n3.data = 3;
  n3.left = NULL;
  n3.right = NULL;

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章