【发布时间】:2017-11-04 06:38:04
【问题描述】:
尝试打印二叉树中的节点时出现分段错误。这似乎是第三个节点的问题。我已经搜索了几个小时的谷歌和堆栈溢出,但我不明白问题是什么。我正在尝试用 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 个)。
【问题讨论】:
-
你在哪里初始化 full
Node结构?我没有看到您将他们的left或right指针设置在任何地方。 -
如果在
add_node函数中node->data == root->data会发生什么? -
我在第一个结构上做错了吗?或者你指的是我在 addNode 函数中设置它们的时候?很抱歉,我对 C 很陌生,并不完全理解这个问题。
-
这种情况还没有发生任何事情。在弄清楚如何将节点正确添加到树后,我将为此编写功能。
标签: c segmentation-fault binary-search-tree