参考书籍:<Data Structures and Algorithm Analysis inC>
删除某个结点:
Tree Delete(datatype X,Tree T)
{
Tree Tmp;
if(T==NULL)
ERROR("Not fount");
else if(X<T->data)
T->lchild=Delete(X,T->lchild);
else if(X>T->data)
T->rchild=Delete(X,T->rchild);
else if(T->lchild&&T->rchild)
{
Tmp=FindMin(T->rchild);
T->data=Tmp->data;
T->rchild=T->Delete(T->data,T->rchild);
}
else
{
Tmp=T;
if(T->lchild=NULL)
T=T->rchild;
else if(T->rchild=NULL)
T=T->lchild;
free(Tmp);
}
return T;
}
1>如果此树为空,返回出错警告
2>如果要删除的结点的元素小于根结点,递归删除左子树
3>如果要删除的结点的元素大于根结点,递归删除右子树
4>要删除的结点的元素值等于根结点的元素且左右子树非空,删除根结点并寻找右子树中所有节点元素值最小的结点代替删除了的结点,并删除该结点
5>要删除的结点的元素值等于根结点的元素且左右子树有一个为空,则删除该结点并使其等于不为空的子树