typedef struct TreeNode *BinTree;
typedef BinTree Position;
struct TreeNode{
ElementType Data;
BinTree Left;
BinTree Right;
};
BinTree BST;
BinTree Insert(ElementType X,BinTree BST)//二叉搜索树的插入算法
{
if(!BST){//若原树为空,生成并返回一个结点的二叉搜索树
BST=malloc(sizeof(struct TreeNode));
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);//递归插入右子树
//else X已经存在,什么都不做
return BST;
}
BinTree Delete(ElementType X,BinTree 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->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;
else if(!BST->Right)//有左孩子或无子结点
BST=BST->Left;
free(Tmp);
}
return BST;
}
二叉搜索树的插入和删除
最新推荐文章于 2024-01-25 20:59:14 发布