数据结构——7.3 树形查找

news2024/11/13 10:33:06

7.3 树形查找

概念

  1. 二叉排序树(BST)
    在这里插入图片描述

二叉排序树(Binary Sort Tree,BST),又称为二叉查找(搜索)树(Binary Search Tree),是一种特殊的二叉树,它具有以下性质:

  1. 若它的左子树非空,则左子树上所有结点的值均小于根结点的值。
  2. 若它的右子树非空,则右子树上所有结点的值均大于根结点的值。
  3. 左、右子树本身又各是一棵二叉排序树,即具有递归性。

这些性质使得二叉排序树在进行查找、插入和删除操作时都能保持较高的效率。例如,在查找操作中,从根节点开始,如果待查找的值小于当前节点的值,则在左子树中继续查找;如果待查找的值大于当前节点的值,则在右子树中继续查找。这种查找方式的时间复杂度与树的高度相关,理想情况下可以达到O(log n)的复杂度。

二叉排序树的插入操作也很高效。在插入新元素时,可以从根节点开始,比较新元素与当前节点的值,根据大小关系决定向左子树还是右子树进行插入,直到找到合适的位置。

此外,由于二叉排序树的中序遍历序列是一个递增有序序列,因此它也可以用于对元素进行排序。

需要注意的是,当插入的元素正好是有序的时,二叉排序树可能会退化成链表,导致查找效率降低。因此,在实际应用中,可能需要采取一些措施来避免这种情况的发生,如使用平衡二叉树等数据结构。

  1. 平衡二叉树
    在这里插入图片描述

平衡二叉树(Balanced Binary Tree),又称为AVL树,是一种特殊的二叉搜索树(Binary Search Tree)结构。它对于任意节点,其左子树和右子树的高度之差不超过1,并且左子树和右子树也都是平衡二叉树。平衡二叉树的设计目的是为了解决普通二叉搜索树在插入、删除等操作时产生不平衡的问题,导致树的高度过高,从而影响搜索的效率。

平衡二叉树具有广泛的应用场景,包括:

  1. 查找和排序:平衡二叉树可以用于快速查找和排序数据。由于其特殊的结构,它可以在O(log n)的时间内完成查找和排序操作,这比线性搜索更为高效。
  2. 实现字典:平衡二叉树可以用来实现字典,其中键是树中的节点,值是与该键相关联的数据。在这种情况下,平衡二叉树的节点将按照键的顺序排列,因此查找特定键的值是非常快速的。
  3. 数据库:平衡二叉树可以用于实现数据库中的索引。索引可以帮助加速数据库的查询操作。平衡二叉树可以在不需要扫描整个数据库的情况下快速定位特定的记录。
  4. 线性数据结构的实现:平衡二叉树可以用于实现一些常见的线性数据结构,如栈、队列和优先队列。这是通过在树的一侧添加新节点并在另一侧移除节点来实现的,从而保持平衡性。

此外,平衡二叉树还有一些常用的算法,如红黑树、AVL、Treap等,用于构造和调整平衡二叉树。

总的来说,平衡二叉树通过保持树的平衡性,提高了搜索、插入和删除操作的效率,在各种应用场景中都发挥着重要作用。

  • 调整最小不平衡子树旋转概述:原父为最小不平衡点

      1.  RR:对儿子:左旋L,左孩变原父右
    
      2.  LL:对儿子:右旋R,右孩变原父左
    
      3.  RL:对孙子:先右旋再左旋RL
    
      4.  LR:对孙子:先左旋再右旋LR
    
  1. 红黑树 在这里插入图片描述

红黑树(Red Black Tree)是一种自平衡的二叉查找树,在计算机科学中常用作一种数据结构,其典型的用途是实现关联数组。红黑树是平衡二叉查找树的变体,它在保持平衡的同时,允许其左右子树的高度差有可能大于1,但不超过一倍。这种设计使得红黑树在插入和删除节点时能够保持较低的平衡代价,并因此获得较高的查找性能。

红黑树具有五大性质,这些性质保证了其结构的平衡性和搜索效率:

  1. 每个节点要么是黑色,要么是红色。
  2. 根节点是黑色。
  3. 每个叶节点(Nil或空值)都是黑色。
  4. 每个红色节点的两个子节点一定都是黑色(但黑色节点的子节点可以也是黑色)。
  5. 从任一节点到其每个叶子的所有简单路径都包含相同数目的黑色节点。

这些性质确保了红黑树在插入、删除和查找操作中的效率。在最坏情况下,红黑树的运行时间也非常良好,可以在O(log n)时间内完成查找、插入和删除操作,其中n是树中元素的数目。

与平衡二叉树(AVL树)相比,红黑树在追求平衡的策略上有所不同。红黑树放弃了追求完全平衡,转而追求大致平衡。这使得红黑树在插入新节点时,最多只需要三次旋转就能达到平衡,实现起来更为简单。而平衡二叉树追求绝对平衡,每次插入新节点后可能需要多次旋转,旋转的次数不能预知。

总的来说,红黑树是一种高效且实用的数据结构,能够在保持平衡的同时提供快速的查找、插入和删除操作。

红黑树的查找:与二叉树BST、AVL相同,从根出发,左小右大,若查找到一个叶结点,则查找失败

理解

  1. 二叉排序树操作复杂度主要与树的高度有关,如果是平衡二叉排序树,则复杂度是O(log₂n),如果是只有单侧树,即n个结点排成一条线,复杂度是O(n)

  2. 二叉排序树的数据结构

名称左指针权值右指针
作用指向比自己小的结点结点的值指向比自己大的结点
  1. 平衡二叉树结点最少的情况

    1. 左右子树相差一个结点,可以递归

    2. 高度为0,最少0个结点;高度为1,最少1个结点

    3. 高度为h,最少结点数n_(h)=n_(h-1)+n_(h-2)+1

    4. 平衡二叉树结点最少的情况下,每个非叶结点的平衡因子都是1

  2. 对于任意一棵非空二叉排序树T1,如果删除某个结点v之后形成二叉排序树T2,再将v结点插入T2形成二叉排序树T3则有

    1. 若v是T1的叶结点,则T1与T3相同

    2. 若v不是T1叶结点,则T1和T3不同

  3. 对于任意一棵非空平衡二叉树T1,如果删除某个结点v之后形成平衡二叉树T2,再将v结点插入T2形成平衡二叉树T3则有

    1. 若v是T1的叶结点,则T1与T3未必相同

    2. 若v不是T1叶结点,则T1和T3未必相同

技巧

  1. 二叉排序树查找序列的规律:以2,252,401,398,330,…为例
次数比较说明序列规律
12访问根结点2
2252,252>2访问左子树2522后是结点2的左子树,后面的值都应该>2
3401,401>252访问左子树401252后是结点252的左子树,后面的值都应该>252
4398,398<401访问右子树398401后是结点401的右子树,后面的值都应该<401
…………

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1612126.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

OpenHarmony 网络与连接—RPC连接

介绍 本示例使用ohos.rpc 相关接口&#xff0c;实现了一个前台选择商品和数目&#xff0c;后台计算总价的功能&#xff0c;使用rpc进行前台和后台的通信。 效果预览 使用说明&#xff1a; 点击商品种类的空白方框&#xff0c;弹出商品选择列表&#xff0c;选择点击对应的商品…

MATLAB实现遗传算法优化BP神经网络预测数值(GABP)

遗传算法&#xff08;Genetic Algorithm, GA&#xff09;和反向传播&#xff08;Back Propagation, BP&#xff09;神经网络是两种强大的算法&#xff0c;分别用于优化和机器学习。将遗传算法与BP神经网络结合&#xff0c;可以利用遗传算法的全局搜索能力来优化BP神经网络的初始…

stm32中断发送接收数据

配置hal库 1配置时钟 2配置uart 3打开中断 程序结构 uart中断函数 中断接收和发送函数 HAL_UART_Receive_IT()&#xff1a;启动中断驱动的接收过程&#xff0c;当接收到指定数量的字节后会产生中断&#xff0c;并调用HAL_UART_RxCpltCallback()回调函数。 HAL_StatusTypeD…

【MIT6.S081】Lab4: traps(详细解答版)

实验内容网址&#xff1a;https://xv6.dgs.zone/labs/requirements/lab4.html 本实验的代码分支&#xff1a;https://gitee.com/dragonlalala/xv6-labs-2020/tree/traps2/ Backtrace 关键点:trapframe、栈 思路&#xff1a; 这道题的关键是栈结构&#xff0c;先阅读xv6中关于栈…

SpringCloud技术—Docker详解、案例展示

简介&#xff1a;Docker 将应用程序与该程序的依赖&#xff0c;打包在一个文件里面。运行这个文件&#xff0c;就会生成一个虚拟容器。程序在这个虚拟容器里运行&#xff0c;就好像在真实的物理机上运行一样。有了Docker&#xff0c;就不用担心环境问题。 总体来说&#xff0c;…

代码随想录刷题|一刷总结

文章目录 一刷总结一、 成果汇报1、leetcode提交记录2、博客更新记录 二、 经验总结2.1.刷过的所有题型2.1.1、数组2.1.2、链表2.1.3、哈希表2.1.4、字符串2.1.5、栈与队列2.1.6、二叉树2.1.7、回溯2.1.8、贪心2.1.9、动态规划2.1.10、单调栈 2.2、做得好的2.3、做得不好的2.4、…

行业模板|DataEase批发零售大屏模板推荐

DataEase开源数据可视化分析平台于2022年6月发布模板市场&#xff08;https://templates-de.fit2cloud.com&#xff09;&#xff0c;并于2024年1月新增适用于DataEase v2版本的模板分类。模板市场旨在为DataEase用户提供专业、美观、拿来即用的大屏模板&#xff0c;方便用户根据…

AtCoder Beginner Contest 350 ----- F - Transpose ---- 题解

F - Transpose: 题目描述&#xff1a; 思路解析&#xff1a; 如果有一对括号&#xff0c;那么删掉括号对&#xff0c;并且将括号对里的字符串翻转&#xff0c;在翻转过程中&#xff0c;使字符串的字母改变大小写。那我们可以通过预处理找到每个括号对。 例如 A(x(AXB)x)B …

计算机网络——数据链路层(介质访问控制)

计算机网络——数据链路层&#xff08;介质访问控制&#xff09; 介质访问控制静态划分信道动态划分信道ALOHA协议纯ALOHA&#xff08;Pure ALOHA&#xff09;原理特点 分槽ALOHA&#xff08;Slotted ALOHA&#xff09;原理特点 CSMA协议工作流程特点 CSMA-CD 协议工作原理主要…

快速开发部署平台Replit

Replit 是可以快速搭建开发、部署环境的平台。能够快速将原型进行部署&#xff0c;代码编辑器支持协同开发&#xff0c;他的在线编辑器做的不错&#xff0c;相当于云上提供了一个 vscode&#xff0c;代码实时更新。Replit 底层是基于容器技术的&#xff0c;可以安全的隔离多个用…

最新Java面试题3【2024中级】

互联网大厂面试题 1&#xff1a;阿里巴巴Java面试题 2&#xff1a;阿里云Java面试题-实习生岗 3&#xff1a;腾讯Java面试题-高级 4&#xff1a;字节跳动Java面试题 5&#xff1a;字节跳动Java面试题-大数据方向 6&#xff1a;百度Java面试题 7&#xff1a;蚂蚁金服Java…

【数据结构2-线性表】

数据结构2-线性表 1 线性表-数组2 线性表-单链式结构2.1 前插顺序单链表2.2 后插顺序单链表2.3 循环单链表2.4 双向链表 总结 线性表、栈、队列、串和数组都属于线性结构。 线性结构的基本特点是除第一个元素无直接前驱&#xff0c;最后一个元素无直接后继之外&#xff0c;其他…

Linux应用开发(8):Linux进程间通信(IPC):管道

Linux应用开发&#xff08;7&#xff09;&#xff1a;Linux进程间通信&#xff08;IPC&#xff09;&#xff1a;POSIX消息队列https://blog.csdn.net/tecsai/article/details/137879465 1. 简述 我们在前面已经介绍了进程间通信&#xff08;IPC&#xff09;常用的“消息队列”…

[大模型]TransNormerLLM-7B FastApi 部署调用

TransNormerLLM-7B FastApi 部署调用 1. TransNormer 介绍 TransNormerLLM 是一个基于线性注意力的 LLM&#xff0c;在准确性和效率方面均优于传统的基于 softmax 注意力的模型。它是在包含多达1.4 万亿个令牌的高质量语料库上进行训练的&#xff0c;TransNormerLLM 从之前的…

【Scientific American】【科学美国人杂志】2024年4月号:目录部分

说明&#xff1a; 仅供学习、参考使用&#xff0c;请勿用于商业用途。 本期购于新加坡&#xff0c;封面图&#xff1a; Contents Special Report: What we’re learning from AI The Race to Decode an Ancient Scroll How scientists, students, gamers and Silicon Valle…

在 Linux 中删除文件和文件夹

目录 ⛳️推荐 前言 删除文件 &#x1f3cb;️练习文件删除 小心删除 删除目录 &#x1f3cb;️练习文件夹删除 测试你的知识 ⛳️推荐 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到…

setmapAVL树红黑树

目录 关联式容器树形结构的关联式容器setset的模板参数列表set的构造函数set的迭代器set的容量操作set其他操作 multisetmap键值对map的模板参数列表map的迭代器map中元素的修改map的容量与元素访问 multimap底层结构avl树avl树概念AVL树结点的定义AVL树的插入AVL树的旋转AVL树…

(助力国赛)美赛O奖数学建模可视化!!!含代码3(误差限图、冰柱图、树图)

众所周知&#xff0c;数学建模的过程中&#xff0c;将复杂的数据和模型结果通过可视化图形呈现出来&#xff0c;不仅能够帮助我们更深入地理解问题&#xff0c;还能够有效地向评委展示我们的研究成果。   今天&#xff0c;承接《可视化代码2》&#xff0c;作者将与大家分享《…

我用ADAU1467加5个ADAU1772,做20进10出的音频处理板(一):硬件设计思路和原理图

作者的话 ADAU1467是现阶段ADI支持最多通道的ADAU音频DSP&#xff0c;他配合外部的AD/DA&#xff0c;可以实现最多32路音频通道&#xff0c;接了一个小项目&#xff0c;我拿它做了一块20进10出的板&#xff0c;10个MIC/LINE输入,10个LINE IN输入&#xff0c;10个HPOUT&#xf…

Redis(二) 单线程架构

redis 的单线程架构 我们都知道 redis 作为缓存&#xff0c;读取速度是非常快的&#xff0c;但是大家知道 redis 的线程架构是怎样的呢&#xff1f;也就是说&#xff0c;redis 是多线程架构还是单线程架构呢&#xff1f; 我们通过一个例子来了解&#xff1a; 首先在 redis 服…