//删除节点
BinTree Delete(ElementType X, BinTree BST)
{
Position Tmp;
if(!BST) printf("要删除的元素未找到");
if(X < BST->Data)
BST->Left = Delete(X, BST->Left);//左子树递归删除
else if(X > BST->Data)
BST->Right = Delete(X, BST->Right);//右子树递归删除
else//找到要删除的点
if(BST->Left && BST->Right) //左右子树都存在
{
Tmp = FindMin(BST->Right); //用右子树中的最小值代替要找到的节点
BST->Data = Tmp->Data;
BST->Right = Delete(BST->Data, BST->Right);
}else
{
Tmp = BST;
if(!BST->Left) //存在右子树或无子结点
BST = BST->Right;
if(!BST->Right) //存在左子树或无子节点
BST = BST->Left;
free(Tmp);
}
return BST;
}