嘗試打印二叉樹中的節點時出現分段錯誤。它看起來是第三個節點的問題。我搜索谷歌和堆棧溢出了幾個小時,但我不明白是什麼問題。我試圖在C中教自己的數據結構,並且非常適合初學者,所以我可能會在某種程度上做一些事情。c二叉搜索樹中的分段錯誤11
#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'結構?我沒有看到你在任何地方設置了「左」或「右」指針。 –
如果在'add_node'函數中'node-> data == root-> data'會發生什麼? –
我做錯了第一個結構?還是你指的是當我在addNode函數中設置它們?我很抱歉,我對C非常陌生,並沒有完全理解這個問題。 – pariscraigm