二叉查找树的基本操作

本文详细介绍了二叉查找树的基本操作,包括查找、插入和删除。查找操作利用二叉查找树的特性,仅需对一侧子树进行递归。插入操作在查找失败的位置创建新节点。删除操作需要考虑保持二叉查找树性质,可通过替换节点或其前驱/后继节点来完成。二叉查找树的性质是中序遍历结果有序,高度较低的树(如AVL树)能提供更快的操作速度。
摘要由CSDN通过智能技术生成

二叉查找树的基本操作有查找、插入、建树、删除

查找操作

 

在之前介绍的二叉树的查找操作时,由于无法确定二叉树的具体特性,因此只能对左右子树都进行递归遍历,但是二叉查找树的性质决定了可以只选择其中的一种进行遍历,因此查找将会是从树根到查找结点的一条路径,故最坏复杂度为O(h),其中h是二叉查找树的高度,于是可以得到查找操作的基本思路

  1. 如果当前根结点root为空,说明查找失败,返回
  2. 如果需要查找的值x等于当前根结点的数据域root->data,说明查找成功,访问
  3. 如果需要查找的值x小于当前根结点的数据域root->data,说明应该在左子树中查找,因此向root->lchild递归
  4. 如果需要查找的值x大于当前根结点的数据域root->data,说明应该在右子树中查找,因此向root->rchild递归

由此可以得到代码:

void search(node *root,int x){
	if(root==NULL){
		printf("search failed\n");
		return;
	}
	if(x==root->data){
		printf("%d\n",root->data);
	}else if(x<root->data){
		search(root->lchild,x);
	}else{
		search(root->rchild,x);
	}
}

可以看到,和普通二叉树的查找函数不同,二叉查找树的查找在于对左右子树的选择递归。在普通二叉树中,无法确定需要查找的值x到底是在左子树还是在右子树上,但

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值