04-树7 二叉搜索树的操作集 (30分)

04-树7 二叉搜索树的操作集 (30分)

Position Find( BinTree BST, ElementType X ) {
	if(!BST) {
		return NULL;
	} else {
		while(BST) {
			if(BST->Data<X)
				BST=BST->Right;
			else if(BST->Data>X) {
				BST=BST->Left;
			} else
				return BST;
		}
		return NULL;
	}
}

Position FindMin( BinTree BST ) {
	if(BST) {
		while(BST->Left) {
			BST=BST->Left;
		}
	}
	return BST;
}

Position FindMax( BinTree BST ) {
	if(BST) {
		while(BST->Right) {
			BST=BST->Right;
		}
	}
	return BST;
}

BinTree Insert( BinTree BST, ElementType X ) {
	if(!BST) {
		BST=(BinTree)malloc(sizeof(struct TNode));
		BST->Data=X;
		BST->Left=BST->Right=NULL;
	} else {
		if(BST->Data>X) {
			BST->Left=Insert(BST->Left,X);
		} else if(BST->Data<X) {
			BST->Right=Insert(BST->Right,X);
		}
	}
	return BST;
}

BinTree Delete( BinTree BST, ElementType X ) {
	if(!BST) {
        printf("Not Found\n");
	} else {
		if(BST->Data>X) {
			BST->Left=Delete(BST->Left,X);
		} else if(BST->Data<X) {
			BST->Right=Delete(BST->Right,X);
		} else {
			if(BST->Left&&BST->Right) {
				BinTree tmp=FindMin(BST->Right);
				BST->Data=tmp->Data;
				BST->Right=Delete(BST->Right,tmp->Data);
				free(tmp);
			} else {
				if(!BST->Left) {
					BST=BST->Right;
				} else if(!BST->Right) {
					BST=BST->Left;
				}
			}
		}
	}
	return BST;
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值