Takže když jsem vymazat v binárním vyhledávacím stromu, musím mít, jako je 7 různých případů, tj
- Left Leaf;
- Pravá Leaf;
- Opustil dítě jen s levou dítětem. // tj uzel který má být vymazán, je levá dítě z jeho rodič a to má jen opustila dítě.
- Opustil dítě pouze s pravým dítětem.
- Pravá dítě jen s levou dítětem.
- Pravá dítě s jediným pravým dítětem.
- Uzel, který bude smazán se oba synové tedy doprava a doleva.
Nyní, když je tento kód pomocí if-elsese dostane pěkně ošklivý .. Existuje nějaký jiný způsob, jak toho dosáhnout.
Tady je můj kód úryvek
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;
}













