04-树7 二叉搜索树的操作集

链接

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



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













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


Position FindMin(BinTree BST) {
	if (BST) {
		while (BST->Left != NULL) {
			BST = BST->Left;
		}
	}
	return BST;
}
Position FindMax(BinTree BST) {
	if (BST) {
		while (BST->Right != NULL) {
			BST = BST->Right;
		}
	}
	return BST;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值