Удаление в бинарном дереве поиска
Поэтому, когда я удаляю в бинарном дереве поиска, мне нужно иметь как 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;
}