二叉查找树的删除操作C语言描述

**

二叉查找树的删除操作C语言描述

**
删除操作是许多数据结构中最困难的操作,一旦发现要被删除的节点,我们需要考虑一下几种可能的情况:

  1. :如果要删除的节点是叶子节点,我们可以直接将其删除即可。

  2. :如果要删除的节点有一个儿子节点,我们将此节点的父节点的指针指向此节点的儿子节点后,将其删除。

  3. :如果要删除的节点有两个儿子节点,我们需要将其右子树的最小数据代替该节点并递归的删除那个节点。

其代码如下:

Search Delete(ElemType X,SearchTree T)
{
	Position TmpCell;										//建立一个空节点//建立一个空节点
	if(T==NULL)												//树为空,返回错误
		error(''Element not found'');
	else if(X<T->ElemType)									//树不为空,要删除的节点在树的左子树,递归左子树
		T->Left=Delete(X,T->Left);
	else if(X>T->ElemType)					 				//树不为空,要删除的节点在树的右子树,递归右子树
		T->Right=Delete(X,T->Right);
	else if(T->Left&&T->Right)								//找到要删除的节点,且此节点有两个儿子节点
		{
			TmpCell=FindMin(T->Right);						//在要删除的右子树中找出右子树的最小值
			T->Element=TmpCell->Element;					//将右子树中的最小值赋值给要删除的节点
			T->Right=Delete(T->Element,T->Right);			//递归删除此节点的右子树的最小节点
		}
	else													//找到要删除的节点,且此节点有一个儿子节点
		{
			TmpCell=T;										//将此节点指向TmpCell
		    if(T->Left==NULL)								//如果此节点没有左儿子节点
		    	T=T->Right;									//将右儿子节点指向此节点
		    else if(T->Right==NULL)							//如果此节点没有右儿子节点
		    	T=T->Left;									//将左儿子节点指向此节点
		    free(TmpCell);									//释放要删除的节点
		}
	return T;
}
		





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值