左节点比父亲节点小,右节点比父亲节点大//二叉搜索树
往二叉搜索数中插入节点
BiTree* Insert(ElementType X,Bitree* BST)
{
if(!BST)//意思是BST是一个空树
{
*BST=(Bitree*)malloc(sizeof(BiTree));
BST->data=X;
BST->left=BST->right=NULL;
}
else
{
if(X<BST->data)
BST->left=Insert(X,BST->left);
else if(X>BST->data)
BST->right=Insert(X,BST->right);
}
return BST;
}
二叉搜索树节点删除
BiTree Delete(ElementTypr X,Bitree *BST)
{
Position Tmp;
if(!BST) printf("树为空")
else if(X<BST->data)
BST->left=Delete(X,BST->left);//左子树递归删除
else if(X>BST->data)
BST->right=Delete(X,BST->right);//右子树递归删除
else//找到了要删除的节点
{
if(BST->right&&BST->left)//判断要删除的节点有左孩子和右孩子
{
Tmp=FindMin(BST->right);
BST->data=Tmp->data;
BST->right=Delete(BST->data,BST->right);
}
else//被删除的节点有一个或者无子节点
{
Tmp=BST;
if(!BST->left)
BST=BST->right;
else if(!BST->right)
BST=BST->left;
free(Tmp);
}
return BST;
}
}