[英]segmentation fault 11 in c binary search tree
嘗試打印我的二叉樹中的節點時出現分段錯誤。 第三個節點似乎有問題。 我已經搜索了谷歌和堆棧溢出了幾個小時,但我不明白是什么問題。 我正在嘗試自學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個被打印)。
您的初始化不完整
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;
因為您沒有初始化結構Node
類型變量的所有成員,所以出現了問題。
我建議,您應該編寫一個函數來初始化Node
類型變量,如下所示:
void init_node(Node * nodeptr, int data)
{
nodeptr->data = data;
nodeptr->left = NULL;
nodeptr->right = NULL;
}
並在您的main()
(或從您要初始化的任何地方)可以簡單地執行以下操作:
init_node(&n1, 1);
init_node(&n2, 2);
init_node(&n3, 3);
這樣,您將永遠不會在Node
類型變量的初始化過程中錯過為left
指針和right
指針分配NULL的機會,並且由於發生錯誤的可能性會大大降低。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.