Ich erhalte einen Segmentierungsfehler, wenn ich versuche, die Knoten in meinem Binärbaum zu drucken. Es scheint ein Problem mit dem dritten Knoten zu sein. Ich habe google gesucht und stapeln Überlauf für Stunden, aber ich kann nicht verstehen, was das Problem ist. Ich versuche, mir Datenstrukturen in C beizubringen, und bin sehr viel Neuling, so dass ich etwas verpönt machen kann.Segmentierungsfehler 11 in c binärer Suchbaum
#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);
}
}
}
Ausgang:
1
2
Segmentation fault: 11
Es scheint nicht ein Problem mit irgendwelchen, aber den dritten Knoten zu sein. Wenn ich die Zeile, die den zweiten Knoten hinzufügt, auskommentiere, bekomme ich den gleichen Fehler (natürlich wird nur 1 gedruckt).
Wo initialisierst du die * full * 'Node' Struktur? Ich sehe nicht, dass Sie ihre "linken" oder "rechten" Zeiger irgendwo setzen. –
Und was passiert, wenn in der Funktion 'add_node'' node-> data == root-> data'? –
Mache ich etwas falsch mit der ersten Struktur? Oder beziehst du dich, wenn ich sie in der addNode-Funktion einstelle? Ich entschuldige mich, ich bin sehr neu in C und verstehe die Frage nicht ganz. – pariscraigm