バイナリツリーのノードを印刷しようとすると、セグメンテーションフォルトが発生します。それは3番目のノードで問題に見えます。私はGoogleを検索し、何時間もスタックのオーバーフローが発生しましたが、問題の内容を理解できません。私は自分自身でCでデータ構造を教えようとしており、非常に初心者ですので、私は何か面倒なことをしているかもしれません。セグメンテーションフォールト11 in 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
第3のノードが、任意の問題があるように思えません。 2番目のノードを追加する行をコメントアウトすると、同じエラーが表示されます(明らかに1つしか表示されません)。
* full * 'Node'構造体はどこで初期化しますか?私は、あなたが左または右のポインタをどこにでも置くことを見ません。 –
'add_node'関数の' node-> data == root-> data'の場合はどうなりますか? –
最初の構造体に何か問題がありますか?または、あなたがaddNode関数でそれらを設定したときを指していますか?私はCにはとても新しいので謝罪し、質問を完全に理解していない。 – pariscraigm