Мой код вставки элементов в бинарном дереве поиска, но после вставки первого элемента программа прекратит работу и не выполняет дальнейшихОшибка при вставке в бинарном дереве поиска
typedef struct BST
{
int info;
struct BST * left;
struct BST *right;
}
bst;
// Глобальная переменная корень
bst *root;
// Вставить функцию
void insert(int x) //x is the elemnent to be inserted
{
bst *ptr,*ptr1;
ptr=(bst*)malloc(sizeof(bst));
if(root==NULL) //checking whether the tree is empty or not
{
ptr->left=ptr->right=NULL;
root=ptr;
}
else
{
ptr1=root;
while(ptr1!=NULL)
{
if(x>ptr1->info) //traversing to right if element is greater than element present
ptr1=ptr1->right;
else
ptr1=ptr1->left; //traversing to left if element is present than the the element
}
}
if(x>ptr1->info)
{
ptr1->right=ptr;
ptr->info=x;
}
else
{
ptr1->left=ptr;
ptr->info=x;
}
}
// показать функции с помощью обхода
void preorder(bst *root)
{
bst *ptr=root;
printf("%d",ptr->info);
preorder(ptr->left);
preorder(ptr->right);
}
int main()
{
int n,x,i;
puts("Enter number of elements");
scanf("%d",&n);
for(i=0;i<n;i++)
{
puts("Enter elements");
scanf("%d",&x);
insert(x);
}
preorder(root);
return 0;
}
Добавить свой основной код функции. Еще лучше, не разделяйте ничего, если весь ваш код намного дольше, чем то, что уже опубликовано. Боковое примечание: ваша функция 'preorder' не очень, если что-то есть' NULL' -> Это определенно не сработает. – Amit
Ваш код обхода проверяет, является ли ptr1 NULL, но затем он обращается к ptr1-> right и ptr1-> слева, не проверяя сначала, если они не являются NULL. – OrenD