[C++]---二叉搜索树简单实现(查找,插入,删除)

本文介绍了二叉搜索树的概念、特点,并详细讲述了查找、插入和删除操作的原理和时间复杂度。在查找操作中,二叉搜索树的时间复杂度接近常数;插入操作保持了O(logN)的时间复杂度;删除操作涉及到多种情况,但平均查找长度与树的深度有关。最后,文章提到了不同插入次序对二叉搜索树性能的影响。
摘要由CSDN通过智能技术生成

目录

 

二叉搜索树概念及特点

1.特点

二叉搜索树的简单操作

1.查找操作

2.插入操作

3.删除操作

二叉搜索树的性能分析


二叉搜索树概念及特点

1.特点

二叉搜索树又称二叉排序树,它可能是一棵空树,或者是具有以下性质的二叉树:

  1. 若它的左子树不为空,则左子树上所有节点的值都小于根节点的值
  2. 若它的右子树不为空,则右子树上所有节点的值都大于根节点的值
  3. 它的左右子树也分别为二叉搜索树

一般我们所说的二叉搜索树是指:满足  根总是 大于左子树小于右子树 的二叉树。

举例:

二叉搜索树的中序遍历结果为有序序列。

二叉搜索树的简单操作

1.查找操作

查找时间复杂度:普通二叉树: O(N)
                             二叉搜索树: log(N) 趋近于常数时间复杂度

	//查找
	 pNode find(const T& value)
	{
		pNode cur = _root;
		while (cur)
		{
			if (cur->_value == value)
				return cur;
			else if (cur->_value >value)
				cur = cur->_left;
			else
				cur = cur->_right	
		}
		return cur;
	}

2.插入操作

这里注意二叉搜索树一般不能有相同元素值结点,所以插入时一般不能插入相同的结点

  1. 新插入的结点一般在叶子。
  2. 新节点插入后不能破坏二叉搜索树的结构。
  • 插入操作过程情况:
  • a.首先判断要插入的元素是否已经存在;
  • b.如果存在,插入失败,返回false ; 如果不存在:判断是否为空树:空树直接插入,返回true,非空树查找要插入的位置;
  • c.根据b结束后提供位置进行插入链接。 

二叉搜索树插入操作的时间复杂度为:O(logN),主要是因为要查找要插入的位置。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值