首页 > 学院 > 开发设计 > 正文

二叉搜索树的插入和删除

2019-11-08 20:27:53
字体:
来源:转载
供稿:网友
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;  }
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表