я думаю, что это должно быть простой проблемой, но я не знаю, что не так ..
GDB говорит
Program received signal SIGSEGV, Segmentation fault.
0x000055555555543e in searchNode (root=0x0, X=1) at problem1.c:40
40 while(cursor->value != X || cursor != NULL)
функция вставки и поиска
typedef struct TreeNode
{
int value;
struct TreeNode *left;
struct TreeNode *right;
struct TreeNode *parent;
} tree;
tree *insert(tree *root, int X)
{
tree *cursor = root;
tree *parent;
while(cursor != NULL)
{
parent = cursor;
if(X >= cursor->value)
cursor = cursor->right;
else
cursor = cursor->left;
}
cursor = (tree *)malloc(sizeof(tree));
cursor->value = X;
cursor->left = cursor->right = NULL;
cursor->parent = parent;
return cursor;
}
tree *searchNode(tree *root, int X)
{
tree *cursor = root;
while(cursor->value != X || cursor != NULL)
{
if(X >= cursor->value)
cursor = cursor->right;
else
cursor = cursor->left;
}
if(cursor == NULL)
return NULL;
else if(cursor->value == X)
return cursor;
}
main function
int main()
{
tree *root = (tree *)malloc(sizeof(tree));
root = NULL;
insert(root, 10);
insert(root ,20);
insert(root, 5);
insert(root, 1);
insert(root, 15);
insert(root, 20);
insert(root, 30);
insert(root, 100);
insert(root, 40);
insert(root, 50);
node = searchNode(root, 1);
}
Насколько я знаю, ошибка сегментации чаще всего возникает, когда я ссылаюсь на NULL-указатель, но я не думаю, что функция поиска неправильная.Я думаю, что я сделал ошибки в функции вставки или инициализации корня дерева, но я не знаю, что не так ..