Я кодирование бинарного дерева поиска и у меня немного трудно найти способ эффективного удаления узла.
У меня этот код:
struct node* deleteNode(int i, struct node *N)
{
if (N==NULL)
{
return NULL;
}
else if (i<N->value)
{
N->size--;
N->lChild=deleteNode(i,N->lChild);
}
else if (i>N->value)
{
N->size--;
N->rChild=deleteNode(i,N->rChild);
}
else if (N->lChild==NULL)
{
return N->rChild;
}
else if (N->rChild==NULL)
{
return N->lChild;
}
else
{
N->size--;
N->value=findMin(N->rChild);
N->rChild=deleteNode(N->value,N->rChild);
}
return N;
}
И Н представляет собой структуру, узел, который имеет 5 полей: значение, lChild, rChild, размер, высота. На самом деле то, что я делаю здесь, чтобы дерево не указывают на узел, который я хочу, чтобы удалить, но когда я пытаюсь поставить что-то вроде:
else if (N->rChild==NULL)
{
free(N);
N=NULL;
return N->lChild;
}
Или каждый подобный взгляд код, он не работает. Может кто-то мне точку в правильном направлении, пожалуйста? Спасибо.













