通用算法 - [树结构] - 二叉搜索树

本文详细介绍了二叉搜索树的概念、存储形式(顺序存储和链式存储)及其查找、插入和删除等操作。二叉搜索树是一种特殊的二叉树,其左子树所有节点值小于根节点,右子树所有节点值大于根节点,具有高效的查找性能。文章还探讨了不同存储方式的优缺点,并给出了操作实现的基本思路。
摘要由CSDN通过智能技术生成

1. 二叉搜索树的概念

二叉搜索树,又称二叉排序数或二叉查找树。
它要么一棵空树,要么具有如下性质:
(1)若它的左子树不为空,则左子树上所有节点的值都小于根节点的值;
(2)若它的右子树不为空,则右子树上所有节点的值都大于根节点的值;
(3)它的左右子树也分别为二叉排序树;
下图就是一棵二叉搜索树
在这里插入图片描述
二叉排序树具有如下优点:

  • 排序、查找、插入和删除方便;
  • 二叉排序树的中序遍历序列为所有节点的排序结果。
  • 查找的时间复杂度为 O ( l o g n ) O(logn) O(logn),仅次于通过哈希表建立数据索引来查找的方式(查找时间复杂度为 O ( 1 ) O(1) O(1));

2. 二叉搜索树的存储形式

二叉搜索树存储方式和普通二叉树一样,有两种存储方式,一种是顺序存储,一种是链式存储。
(1)顺序存储
二叉树的顺序存储,就是用一组连续的存储单元存放二叉树中的结点。因此,必须把二叉树的所有结点安排成为一个恰当的序列,结点在这个序列中的相互位置能反映出结点之间的逻辑关系,用编号的方法从树根起,自上层至下层,每层自左至右地给所有结点编号。
缺点是有可能对存储空间造成极大的浪费,在最坏的情况下,一个深度为 k k k且只有 k k k个结点的右单支树需要 2 k − 1 2^{k}-1 2k1个结点存储空间。
依据二叉树的性质,完全二叉树和满二叉树采用顺序存储比较合适,树中结点的序号可以唯一地反映出结点之间的逻辑关系,这样既能够最大可能地节省存储空间,又可以利用数组元素的下标值确定结点在二叉树中的位置,以及结点之间的关系。
如图所示:

图1 完全二叉树使用顺序存储结构存储。
在这里插入图片描述
在这里插入图片描述
图2 非完全二叉树改造成完全二叉树后的存储示意图。
(2)链式存储结构
二叉树的链式存储结构是指,用链表来表示一棵二叉树,即用链来指示元素的逻辑关系。
通常的方法是链表中每个结点由三个域组成,数据域和左右指针域,左右指针分别用来给出该结点左孩子和右孩子所在的链结点的存储地址。其结点结构为:
在这里插入图片描述
其中,data域存放某结点的数据信息;lchild与rchild分别存放指向左孩子和右孩子的指针,当左孩子或右孩子不存在时,相应指针域值为空(用符号∧或NULL表示)。利用这样的结点结构表示的二叉树的链式存储结构被称为二叉链表,如图3所示。
在这里插入图片描述
图3 二叉树的二叉链表表示示意图

3. 二叉搜索树中的常用操作

  • 查找
    查找操作的思路:
    (1)从根节点开始查找,如果根节点为空,则返回NULL;
    (2)如果根节点非空,则将查找数据和根节点比较,
    (3)如果查找数据大于根节点,则在右子树继续查找;
    (4)如果查找数据小于根节点,则在左子树继续查找;
    (5)如果查找数据等于根节点的值
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Albert_YuHan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值