数据结构(树)

数据结构(树)

        度:每一个节点的子节点数量

 二叉查找树:

          每一个节点上最多有两个子节点;

         任意节点左子树上的值都小于当前节点;

         任意节点右子树上的值都大于当前节点。

        添加节点规则:

        小的存左边,大的存右边,一样的不存

        查找规则:和添加一样

        弊端:

        当数据有序时,插入效率低

二叉树的遍历方式:

        前序遍历:

        从根节点开始,然后按照当前结点,左子结点,右子结点的顺序遍历

        中序遍历:

        从最左边的子节点开始,然后按照左子结点,当前结点,右子结点的顺序遍历

        后序遍历:

        从最左边的子节点开始,然后按照左子结点,右子结点,当前结点的顺序遍历

        层序遍历:

        从根节点开始一层一层的遍历

平衡二叉树:

        规则:

        任意节点左右子树高度差不超过1

        平衡机制:

         规则1:左旋

        确定支点:从添加的结点开始,不断往父节点找不平衡的节点

        步骤: 1) 把不平衡的点作为支点,把支点左旋降级,变成左子结点,晋升原来的右子节点

        把不平衡的点作为支点;将根节点的右侧往左拉;原先的右子节点变成新的父节点,并把多余的左子节点出让,给已经降级的根节点当右节点

         规则2:右旋

         确定支点:从添加的结点开始,不断往父节点找不平衡的节点

        步骤: 1) 把不平衡的点作为支点,把支点右旋降级,变成右子结点,晋升原来的左子节点

         把不平衡的点作为支点;将根节点的左侧往右拉;原先的左子节点变成新的父节点,并把多余的右子节点出让,给已经降级的根节点当左子节点

         触发时机:当添加一个节点之后,该树不再是一颗平衡二叉树

需要旋转的四种情况:

        左左:

        当根节点左子树的左子树有节点插入,导致二叉树不平衡

        需要一次右旋

        左右:

        当根节点左子树的右子树有节点插入,导致二叉树不平衡

        先局部左旋,到左左情况,然后再整体右旋

        右右:

         当根节点右子树的右子树有节点插入,导致二叉树不平衡

        需要一次左旋

        右左:

        当根节点右子树的左子树有节点插入,导致二叉树不平衡

        先局部右旋,到右右情况,然后再整体左旋

红黑树:

        红黑树是一种自平衡的二叉查找树,每个节点上都有存储位表示节点的颜色;

        每一个节点可以是红或者黑;

        红黑树不是高度平衡的,它的平衡是通过“红黑规则”进行实现的

        红黑规则:

        每一个节点是红色或是黑色;

        根节点必须是黑色;

        如果一个节点没有子节点或者父节点,则该节点相应的指针属性值为Nil,这些Nil视为叶节点,每个叶节点(Nil)是黑色的;

        如果某一个节点是红色,那么它的子节点必须是黑色(不能出现两个红色节点相连的情况);

        对每一个节点,从该节点到其所有后代叶节点的简单路径上,均包含相同数目的黑色节点

        

        图来自黑马程序员网课 

        添加节点规则:

        默认颜色:红色(效率高)

        

                图来自黑马程序员 

        

                                图来自黑马程序员 

        红黑树增删改查性能较好

        

        

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

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

相关文章

Unity与前端交互:深度解析与实战指南

Unity与前端交互:深度解析与实战指南 在现代游戏开发和跨平台应用中,Unity作为一款强大的游戏引擎,其与前端技术的交互能力显得尤为重要。本文将从四个方面、五个方面、六个方面和七个方面深入探讨Unity如何与前端进行交互,揭示其…

Postman 连接数据库 利用node+xmysql

1、准备nodejs环境 如果没有安装,在网上找教程,安装好后,在控制台输入命令查看版本,如下就成功了 2、安装xmysql 在控制台输入 npm install -g xmysql 3、连接目标数据库 帮助如下: 示例: 目标数据库…

UI前端交互的艺术:探索设计的四个维度、五个层面、六个要点与七大原则

UI前端交互的艺术:探索设计的四个维度、五个层面、六个要点与七大原则 在数字时代的浪潮中,UI前端交互设计如同一门深邃的艺术,既需要技术支撑,又需要设计灵感。它关乎用户体验,影响着产品的成败。那么,UI…

操作系统:进程的状态

进程三种的状态是什么? 运行:进程占有处理器正在运行的状态。进程已获得CPU,其程序正在执行。 就绪:进程具备运行条件,等待系统分配处理器以便运行的状态。当进程已分配到除CPU以外的所有必要资源后,只要…

HTML静态网页成品作业(HTML+CSS)—— 美食湘菜介绍网页(5个页面)

🎉不定期分享源码,关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 🏷️本套采用HTMLCSS,未使用Javacsript代码,共有5个页面。 二、作品演示 三、代…

企业估值的三种方法

估值模型三剑客—DCF、P/E、EV /EBITDA 三种主要估值模型的优缺点: DCF 优点:通过对自由现金流的折现计算,反映了公司内在价值的本质,是最重要与最合理的估值方法。 缺点:未来自由现金流的估计不准确,受折现率影响…

MASA:匹配一切、分割一切、跟踪一切

摘要 https://matchinganything.github.io/ 在复杂场景中跨视频帧稳健地关联相同对象是许多应用的关键,特别是多目标跟踪(MOT)。当前方法主要依赖于标注的特定领域视频数据集,这限制了学习到的相似度嵌入的跨域泛化能力。我们提…

企业应如何选择安全合规的内外网文件摆渡系统?

网络隔离是一种安全措施,旨在将网络划分为不同的部分,以减少安全风险并保护敏感信息。常见的隔离方式像物理隔离、逻辑隔离、防火墙隔离、虚拟隔离、DMZ区隔离等,将网络隔离成内网和外网。内外网文件摆渡通常指在内部网络(内网&am…

Llama模型家族之拒绝抽样(Rejection Sampling)(五)蒙特卡罗算法在拒绝抽样中:均匀分布与样本接受标准

LlaMA 3 系列博客 基于 LlaMA 3 LangGraph 在windows本地部署大模型 (一) 基于 LlaMA 3 LangGraph 在windows本地部署大模型 (二) 基于 LlaMA 3 LangGraph 在windows本地部署大模型 (三) 基于 LlaMA…

weditor安装时提示This is an issue with the package mentioned above, not pip

报错如下: note: This error originates from a subprocess, and is likely not a problem with pip. error: metadata-generation-failed Encountered error while generating package metadata. ╰─> See above for output. note: This is an issue with …

kerberos: Clock skew too great (37) - PROCESS_TGS

kerberos认证失败错误信息: Caused by: org.ietf.jgss.GSSException: No valid credentials provided (Mechanism level: Clock skew too great (37) - PROCESS_TGS)at sun.security.jgss.krb5.Krb5Context.initSecContext(Krb5Context.java:772)at sun.security.j…

正则限制字符串的长度必须是n的倍数

正则可以帮助我们来判断用户提供的字符串是否是指定长度n的倍数, 写法如下: ^([\w]{8})*$ 说明: ^ 匹配字符串开头; $ 匹配字符串结尾; [\w] 这个为你要限制用户输入的字符串的类型 匹配字母或数字或下划线&am…

每日题库:Huawe数通HCIA——全部【813道】

1.关于ARP报文的说法错误的是?单选 A.ARP报文不能被转发到其他广播域 B.ARP应答报文是单播方发送的 C.任何链路层协议都需要ARP协议辅助获取数据链路层标识 DARP请求报文是广播发送的 答案:C  解析: STP协议不需要ARP辅助 2.园区网络搭建时,使用以下哪种协议可以避免出现二层…

Python与C语言:深入探索两者的奥秘与差异

Python与C语言:深入探索两者的奥秘与差异 在编程的世界里,Python和C语言如同两位性格迥异的伙伴,各自拥有独特的魅力和应用场景。Python以其简洁易懂的语法和强大的库支持赢得了众多开发者的青睐,而C语言则以其接近硬件的低级特性…

【小白专用24.6.8】c#异步方法 async task调用及 await运行机制

await是C#中用于等待异步操作完成的关键字。它通常用于异步方法内部,使得在等待异步操作期间,线程可以继续执行其他操作,从而保持程序的响应性。 在使用await时,需要注意以下几点: 1. async修饰符: 使用…

通过调用栈快速探究 Compose 中 touch 事件的处理原理

前言 Compose 视图的处理方式和 Android 传统 View 有很大差别,针对 touch 事件的处理自然也截然不同。 如何在 Compose 中处理 touch 事件,官方已有非常详尽的说明,可以参考:https://developer.android.google.cn/jetpack/comp…

UG数控编程入门:从基础到精通的全方位指南

UG数控编程入门:从基础到精通的全方位指南 UG数控编程,作为现代制造业中不可或缺的一环,对于初学者来说,既是挑战也是机遇。本文将从四个方面、五个方面、六个方面和七个方面,为你揭示UG数控编程的奥秘,助…

产品NPDP+项目PMP助你成长

前言 从管理的角度来讲,产品经理和项目经理的区别,我们应该吧项目经理和产品的区别分为一纵一横,那一纵就是我们的项目经理,项目经理在整个新产品研发过程中他扮演的是管理监督项目参与者的角色,其中包括研发部门、技术部门、市场部门或是销售部门等等。他所要做的事情就…

UI与前端:揭秘两者的微妙差异

UI与前端:揭秘两者的微妙差异 在数字化时代的浪潮中,UI设计和前端开发已成为塑造用户体验的两大核心力量。然而,这两者之间究竟有何区别?本文将深入剖析UI设计与前端开发的四个方面、五个方面、六个方面和七个方面的差异&#xf…

第二十讲:文件操作

第二十讲:文件操作 1.什么是文件1.1什么是文件1.1.1程序文件1.1.2数据文件 1.2二进制文件和文本文件数据的存储方式 2.流和标准流2.1流2.2标准流 3.文件指针4.文件的打开与关闭5.文件顺序读写5.1顺序读写函数介绍5.2打开和关闭函数5.2.1fopen函数5.2.2fclose函数 5.…