Я пытаюсь реализовать двоичное дерево поиска на C, более конкретно ищущее предшественника. Однако всякий раз, когда я пытаюсь запустить программу, я получаю хранилище сегментации. Вот код, о котором идет речь:Ошибка сегментации при использовании оператора if с указателями (дерево BST)
#include <stdio.h>
#include <stdlib.h>
struct tree
{
int a;
tree *left;
tree *right;
tree *prev;
}*root=NULL;
tree *searchSpecific (tree *root, int val)
{
tree *x=root;
if (!x)
{
return NULL;
}
else
{
while(x && val!=x->a)
{
if (val>x->a)
x=x->left;
else x=x->right;
}
}
return x;
}
int previous(tree *root, int f)
{
tree *x=searchSpecific(root,f);
if(x->left)
{
x=x->left;
while(x->right) x = x->right;
return x->a;
}
tree *temp;
do
{
temp = x;
x = x->prev;
} while(x && (x->right != temp));
return x->a;
}
появляется выдаёт ошибку сегментации, если заявление, если (x-> слева) и в предыдущей функции(). Я хочу проверить, существует ли этот узел, но программа терпит крах каждый раз, и я не знаю, что с ним не так.
Недостаточно: сбой падает, но снова укусы: 'do {temp = x; x = x-> prev; ... '. Еще одна иллюстрация того, как «do/while» петли в основном сломаны. – chqrlie
Спасибо за помощь. В конце я добавил «x! = NULL» в первый «if()» и поставил цикл «do ... while» в оператор «if (x)», и он исправил все выпущенные. – Arattor