Удаление в бинарном дереве поиска

Поэтому, когда я удаляю в бинарном дереве поиска, мне нужно иметь как 7 разных случаев, т.е.

Левый лист;Правый лист;Оставленный ребенок с единственным оставленным ребенком. //i.e удаляемый узел - это левый потомок своего родителя, и у него есть только левый потомок.Левый ребенок с единственным правым ребенком.Правый ребенок с единственным левым ребенком.Правильный ребенок с единственным правильным ребенком.У удаляемого узла есть оба потомка, то есть правый и левый.

Теперь, когда этот код используетif-else это становится довольно противным .. есть ли другой способ сделать это.

Вот мой фрагмент кода

if(current->left==NULL && current->right==NULL && current->key<prev->key)   //left leaf
prev->left=NULL;
else if(current->left==NULL && current->right==NULL && current->key>prev->key) // right     leaf
prev->right=NULL;
else if(current->left!=NULL && current->right==NULL && current->key<prev->key) // left     child with one child
prev->left=current->left;
else if(current->left==NULL && current->right!=NULL && current->key<prev->key)
prev->left=current->right;
else if(current->left!=NULL && current->right==NULL && current->key>prev->key)
prev->right=current->left;
else if(current->left==NULL && current->right!=NULL && current->key>prev->key)
prev->right=current->left;
else if(current->left!=NULL && current->right!=NULL)
{
    check=current->right;
    check1=check;
    while(check->left!=NULL)
    {
    check1=check;
    check=check->left;
    }
    *current=*check;
    check1->left=NULL;
}

Ответы на вопрос(3)

Ваш ответ на вопрос