数据结构学习笔记——二叉排序树

这篇具有很好参考价值的文章主要介绍了数据结构学习笔记——二叉排序树。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、树形查找

查找算法中,基于树这种数据结构进行查找即为树形查找,可将其分为二叉排序树平衡二叉树B树三种树形查找方法:

二、二叉排序树的定义

二叉排序树也称为二叉查找树或二叉搜索树(注意:与二分查找的判定树不同),其中各结点值的大小关系是:左子树<根结点<右子树,且左、右子树也是一棵二叉排序树满足其条件,若对该树进行中序遍历,可得到一个递增的序列。例如以下都是二叉排序树:
数据结构学习笔记——二叉排序树
数据结构学习笔记——二叉排序树

二叉排序树的查找过程与折半查找(二分查找)相似,即折半查找的判定树本身就是一棵二叉排序树。

折半查找可通过一棵二叉树表示,且是一棵平衡二叉树,它的中序遍历序列是递增的,将当前查找的中间元素mid为根结点,左子表和右子表分别作为根结点的左子树和右子树(左<根<右):
数据结构学习笔记——二叉排序树

三、二叉排序树的插入和构造

对一棵空二叉排序树进行插入,则直接将结点依次插入即可,遵循二叉排序树各结点值的关系,若插入的结点小于根结点的值,则插入到左子树,否则插入到右子树。

例如,对于查找的关键字序列{53,17,12,66,58,70,87,25,56,60}构造二叉排序树。

1、从空树开始,依次插入元素,首先插入53,如下:
数据结构学习笔记——二叉排序树
2、插入元素17,由于17<53,所以放在53的左子树:
数据结构学习笔记——二叉排序树
3、插入元素12,由于12<17,放在17的左子树:
数据结构学习笔记——二叉排序树
4、插入元素66,由于66>53,放在53的右子树:
数据结构学习笔记——二叉排序树
5、插入元素58,由于58<66,放在66的左子树:
数据结构学习笔记——二叉排序树
6、插入元素70,由于70>66,放在66的右子树:
数据结构学习笔记——二叉排序树
7、插入元素87,由于87>70,放在70的右子树:
数据结构学习笔记——二叉排序树
8、插入元素25,由于25>17,放在17的右子树:
数据结构学习笔记——二叉排序树
9、插入元素56,由于56<58,放在58的左子树:
数据结构学习笔记——二叉排序树
10、插入元素60,由于60>58,放在58的右子树:
数据结构学习笔记——二叉排序树
可以看出,若将这棵树进行中序遍历,得到的中序遍历序列为:
{12、17、25、53、56、58、60、66、70、87},它是一个递增序列。

四、二叉排序树的平均查找长度

(一)二叉排序树的查找

二叉排序树的查找是由根结点开始,然后沿着二叉树的分支依次向下查找,若要查找的元素与当前根结点相等,则查找成功;若小于根结点,则在当前根结点的左子树上继续查找,若大于,则在当前根结点的右子树上继续查找,依次递归。

  • 二叉排序树的查找效率取决于树的高度,这里给出平衡二叉树的定义(若二叉排序树的左、右子树的高度之差的绝对值不超过1,则称为平衡二叉树),所以平均查找长度为O(log2n)。
    数据结构学习笔记——二叉排序树
  • 对n个结点构造二叉排序树,理想情况下,即为一棵满二叉树时的高度,类比于完全二叉树,即树的高度为h=⌈log2(n+1)⌉,所以二叉排序树的最小深度为⌈log2(n+1)⌉;而若二叉排序树只是一个单支树(左或右单支树),此时最坏情况,即树的高度为元素的个数,则其最大深度为n。
    数据结构学习笔记——二叉排序树

对于一棵含有n个结点的二叉树,当它为完全二叉树时,具有最小高度,最小高度为h=⌈log2(n+1)⌉或⌊log2n⌋+1(其中 ⌈ ⌉表示向上取整,取比自己大的最小整数,⌊ ⌋表示向下取整,取比自己小的最大整数);当它为一棵单支树时具有最大高度,即为一个线性表。

(二)二叉排序树的比较次数

  • 对n个结点的二叉排序树中,查找某个元素,最坏情况下是当构造的二叉树为单支树时,为n层,此时查找树中最后一个元素或不存在的元素时,需要进行n次比较。

例如,对于查找的关键字序列{52,26,14,32,71,60,93,58,24,41}构造二叉排序树,求在该树中查找元素60需要进行的比较次数和比较的结点。

构造二叉排序树如下:
数据结构学习笔记——二叉排序树
对元素60进行查找,首先与根结点52进行比较,由于60>52,沿着右子树依次向下比较,60<71,向下元素71的左子树向下继续比较,60=60,查找成功,故比较次数为3,依次比较的元素为52、71、60。

(三)二叉排序树的平均查找长度计算

在等概率的情况下,二叉排序树查找成功的平均查找长度ASL成功=每层层数乘以每层结点个数之和除以二叉排序树的结点总个数

例如,下面这个二叉排序树,在等概率下计算其查找成功的平均查找长度:

数据结构学习笔记——二叉排序树
元素总数为10,其中第一层元素个数为1,第二层为2,第三层为4,第四层为3,所以可得查找成功的平均查找长度:
A S L 成功 = ( 1 × 1 + 2 × 2 + 3 × 4 + 4 × 3 ) 10 = 29 10 ASL_{成功}=\frac{(1\times1+2\times2+3\times4+4\times3 )}{10} =\frac{29}{10} ASL成功=10(1×1+2×2+3×4+4×3)=1029

五、二叉排序树的删除

在二叉排序树中删除一个结点,不能直接删除,要确保删除后的二叉排序树的性质不变,删除结点分为以下三种情况:

(一)删除叶子结点

  • 若删除的结点是二叉排序树的叶子结点,则可以直接删除,删除后并不影响二叉排序树的性质。

例如,删除下列二叉排序树中的87结点:

数据结构学习笔记——二叉排序树
直接删除:
数据结构学习笔记——二叉排序树

(二)删除结点存在左孩子或右孩子

  • 若删除的结点存在左孩子或右孩子时,则让该结点的子树成为其父结点的子结点

例如,删除下列二叉排序树中的70结点:

数据结构学习笔记——二叉排序树
删除后,用该结点的子树(左/右孩子),即87代替它成为删除结点的父节点的子结点:
数据结构学习笔记——二叉排序树

(三)删除结点存在左孩子和右孩子

  • 若删除结点存在左孩子和右孩子,则令该结点的前驱/后继代替其本身(用中序遍历序列中该结点的前驱/后继代替),调整后的树仍是二叉排序树。

例如,删除下列二叉排序树中的66结点:

可得中序遍历序列{12,17,25,53,56,58,60,66,70,87}。
数据结构学习笔记——二叉排序树
由于66结点左孩子和右孩子都存在,所以根据其中序遍历序列{12,17,25,53,56,58,60,66,70,87},选择遍历序列中66的第一个子女代替,即70代替,如下:
数据结构学习笔记——二叉排序树
或者也可以用遍历序列中66的前驱结点60代替,如下:
数据结构学习笔记——二叉排序树

六、二叉排序树与二分查找对比

  • 相同的关键字根据插入顺序的不同可以形成不同的二叉排序树,而二分查找的判定树是唯一的。
名称 树是否唯一
二分查找判定树 唯一
二叉排序树 不唯一
  • 二叉排序树中插入和删除结点操作只需修改指针,平均时间复杂度为O(log2n),而二分查找中,由于表中的元素顺序是有序的,所以插入和删除结点操作的时间复杂度为O(n)。

当有序表是静态查找表时,采用顺序表作为存储结构较合适,且采用二分查找;而若有序表是动态查找表时,采用二叉排序树作为其存储结构。文章来源地址https://www.toymoban.com/news/detail-490746.html

到了这里,关于数据结构学习笔记——二叉排序树的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数据结构-----二叉排序树

    目录 前言 1.什么是二叉排序树 2.如何构建二叉排序树 3.二叉排序树的操作 3.1定义节点储存方式 3.2插入节点操作 3.2创建二叉排序树 3.4遍历输出(中序遍历) 3.5数据查找操作 3.6获取最大值和最小值 3.7删除节点操作 3.8销毁二叉排序树 4.完整代码         今天我们继续学习新的

    2024年02月03日
    浏览(35)
  • 详解数据结构——二叉排序树

    目录 二叉排序树 二叉排序树的查找 二叉排序树的插入 二叉排序树的删除 查找时间效率分析     二叉排序树,又称二叉查找树(BST,Binary Search Tree)一棵二叉树或者是空二叉树,或者是具有如下性质的二叉树:  左子树上所有结点的均小于根结点的; 右子树上所有

    2024年02月03日
    浏览(32)
  • 数据结构排序二叉树(下)

    哎,调了几天深度学习模型,今天来更新排序二叉树 文章目录 前言 一、排序二叉树的结构定义 二、在排序二叉树添加数据 三、定义创建排序二叉树函数 四、查找一棵二叉排序树中的结点x的所在层数 五、删除二叉排序树中Tx的节点 六、查找二叉排序树中的所有小于ke

    2024年01月20日
    浏览(25)
  • 数据结构之排序二叉树

    排序二叉树 基本概念 二叉树是一种从上往下的树状结构的数据结构,从根节点开始每个节点最多有两个子节点,左边的为左子节点,右边的为右子节点。 排序二叉树–有顺序,且没有重复元素的二叉树。顺序为: 对每个节点而言: 1)如果左子树不为空,则左子树上的所有

    2024年02月02日
    浏览(30)
  • 数据结构实现二叉排序树

    摘  要 二叉排序树(Binary Search Tree,BST),又叫做二叉查找树,二叉搜索树,是一种对查找和排序都有用的特殊二叉树。因为二叉排序树的中序遍历有序性,即得到的递增的序列,由于有序,因此其查找与二分查找类似,每次都可以缩小查找范围,查询效率较高。同时因为二叉排

    2024年02月03日
    浏览(20)
  • 【数据结构】【算法】二叉树、二叉排序树、树的相关操作

    树结构是以分支关系定义的一种层次结构,应用树结构组织起来的数据,逻辑上都具有明显的层次关系。 操作系统中的文件管理系统、网络系统中的域名管理、数据库系统中的索引管理等都使用了树结构来组织和管理数据。 树 Tree 是由n个节点组成的有限集合。在任意一颗非

    2024年02月04日
    浏览(40)
  • 【数据结构】二叉排序树——平衡二叉树的调整

    参考视频: 懒猫老师-数据结构-(59)平衡二叉树【互动视频】 (1)什么是平衡二叉树 平衡二叉树(Balanced Binary Tree)是一种特殊的二叉查找树,它的目的是保持树的高度尽量平衡,以保证查找、插入、删除等操作的时间复杂度为 O(log n)。 常见的平衡二叉树算法包括 AVL 树、红

    2024年02月04日
    浏览(33)
  • 数据结构二叉排序树应用一

    2022.11.19 本关任务:输入一个无序序列,创建一棵二叉排序树。 为了完成本关任务,你需要掌握:1.二叉排序树定义,2.如何创建一棵二叉排序树。 二叉排序树定义 二叉排序树:即一个二叉树,它的每一个结点的左孩子的data值比当前结点的data值小,而右孩子结点的data值比当

    2024年02月08日
    浏览(27)
  • 【开卷数据结构 】二叉排序树(BST)

    目录 二叉排序树(BST) 二叉排序树的定义 二叉排序树的操作 二叉排序树的查找 代码演示 二叉排序树的插入 代码演示 二叉排序树的构造 代码演示 二叉排序树的删除 Q:什么是二叉排序树 A: 二叉排序树或者是一棵空树,或者是具有如下性质的二叉树 1) 若它的左子树不空

    2024年02月11日
    浏览(29)
  • 数据结构-二叉排序树(建立、查找、修改)

    二叉排序树是动态查找表的一种,也是常用的表示方法。 其中,它具有如下性质: 1.若它的左子树非空,则其左子树的所有节点的关键值都小于根节点的关键值。 2.若它的右子树非空,则其右子树的所有节点的关键值都大于根结点的关键值。 3.它的左右子树也分别都是二叉排

    2024年02月04日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包