[数据结构]深入浅出讲解二叉树-平衡二叉树-左右旋转

树是一种数据结构,单位为Node(节点)。不同于链表的直线排列,树呈现一种自上而下的分层排序规则。

        树->数据结构:
        单元为Node(节点)->当这样的节点多了 就可以关联出不同的形态
        一个父节点有一个左子节点,有一个右子节点
        有的节点下方没有其他数据 也就没有左子节点和右子节点了
        事实上,每一个节点都是一个独立的对象。存在着:
        a.本身储存的值 b.父节点地址 c.左子节点地址 d.右子节点地址
        看到这里,我们会想到链表。因此链表也是有数据域和指针域
        你会发现 如果我们聚焦目光于一个节点
        同链表相比,二叉树的节点在数据域上是相差无几的
        只是指针域被分成了三个部分:父节点的地址,左子节点的地址,右子节点的地址
        树结构中,普及一些专业名词:
        1.度:每一个节点的子节点数称为度。普通二叉树的非根节点和最底层节点的度均是2
        2.二叉树:我们同样观察到,有一种树最上层的节点没有父节点
        最下层的节点没有左右子节点,我们将一种度<=2的的数据结构称为二叉树
        3.树的高度:也就是树的总层数。
        4.根节点:最上层的节点(只有唯一一个)
        5.根节点的左子树:这个左子树相当于以其左子节点作为一棵新树的根节点
        由这个左子节点衍生出来的一整棵树都是根节点的左子树
        6.根节点的右子树:原理如上。
        7.二叉查找树:
        二叉查找树是一种特殊的二叉树,它具有以下性质:
          1.每一个节点上最多有两个子节点(首先是一个二叉树)
          2.任意节点左子树的大小均小于当前节点
          3.任意节点的右子树的大小均大于当前节点
        添加原则:
          1.小的存左边
          2.大的存右边
          3.一样大的不存
        8.二叉树的遍历方式
        a.前序遍历:从根节点开始,按照 当前->左子树->右子树顺序遍历
        b.中序遍历(最重要):按照左子树->当前节点->右子树顺序遍历
        c.后序遍历:按照左子树->当前->右子树的顺序进行遍历
        d.层序遍历:从上到下一个一个取 注意 先左后右
        这个东西很好理解 前序就是当前节点最先获取 中序就是当前节点在中间获取 后序就是当前节点在最后获取
        ——————————————————————————————————————————————————————————————————————
        二叉查找树的弊端:
        7 10 11 12 13 按照二叉查找数
        首先存7作为根节点 然后10放11后面
         大概的样子就是
                7
                 10
                   11
                     12
                      13
         现在这一棵二叉树似乎变成了一个单向链表 但是此时两边的树是不一样长的
         这样的树是有问题的 这样的查询效率过低了 如果我要查询数据13 岂不是要从根节点开始
         找5次才能找到13
         关键点:要提高查询效率 左右的高度要差不多长的树->
         这里我们就引入了一个新的二叉树 这样的二叉树是基于二叉查找树的
         增加一条新的规则:任意节点左右子树的(高度差)不超过1
         (这点很容易迷惑 任意的意思是从上往下的每一个节点)
         不能被根节点的左子树右子树的高度满足条件迷惑
         当你看根节点左右子节点的时候 就会发现可能子节点不满足这个条件
         ————————————————————————————————————————————————————————————————————————
         平衡二叉树的旋转机制:
         规则1:左旋(前提条件:添加了一个节点后,该树不是一颗平衡二叉树)
         规则2:右旋(当添加一个节点之后,该节点不是一棵平衡二叉树)
         研究左旋转规则:
         1.确定支点:从添加的节点开始,不断地朝父节点寻找不平衡点
         2.将根节点的右边往左边拉
         3.原先的右节点变成新的父节点,并且把多余的左子节点出让 给已经降级的根节点当右节点
         研究右旋规则:
         1.发现添加节点后,平衡被破坏了,从被添加的节点开始向上找第一个不平衡的点
         2.找到第一个不平衡的点作为支点
         3.原先的左子节点变成新的父节点,并且把多余的右子节点出让 给已经降级的根节点当左节点
——————————————————————————————————————————————————————————————————————————————
         平衡二叉树需要旋转的四种情况
         1.左左:根节点的左子树的左子树不平衡,导致二叉树不平衡->一次右旋就可以
         2.左右:根节点的左子树的右子树不平衡,导致二叉树不平衡->一次局部左旋和整体一次右旋
         ps:这里很有意思 就是要先把左右问题变成左左问题 再转化为左左的问题
         3.右右:就是根节点的右子树的右子树不平衡,导致二叉树不平衡->一次左旋就可以
         4.右左:根节点的右子树的左子树不平衡,导致二叉树不平衡->一次局部右旋和整体一次左
 

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

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

相关文章

Java面向对象第九天

精华笔记&#xff1a; 多态&#xff1a;多种形态 意义&#xff1a; 同一个对象被造型为不同的类型时&#xff0c;有不同的功能------所有对象都是多态的 ----对象多态&#xff1a;我、你、水...... 同一类型的引用指向不同的对象时&#xff0c;有不同的实现------所有抽象方法…

uniapp-从后台返回的一串地址信息上,提取省市区进行赋值

1.这是接口返回的地址信息 2.要实现的效果 3.实现代码&#xff1a; <view class"address">{{item.address}}</view>listFun() {let url this.$url.url.positionInfoCompany;let param {page: this.page,limit: this.limit,keyword: this.keyword,};thi…

系统部署安装-Centos7-系统常用工具安装

文章目录 Yum环境安装介绍安装 GCC安装介绍验证安装在线安装离线安装 Yum环境安装 介绍 Yum是Centos操作系统中的一个重要工具&#xff0c;它可以帮助用户方便地管理软件安装和更新&#xff0c;而Y源则是提供这些软件的资源库。在后续在线安装系统时&#xff0c;需要使用到Yu…

大数据(十二):方差分析和参数估计

专栏介绍 结合自身经验和内部资料总结的Python教程,每天3-5章,最短1个月就能全方位的完成Python的学习并进行实战开发,学完了定能成为大佬!加油吧!卷起来! 全部文章请访问专栏:《Python全栈教程(0基础)》 再推荐一下最近热更的:《大厂测试高频面试题详解》 该专栏对…

服务器环境是什么意思?

服务器环境是指运行在服务器上的软件和硬件配置的组合。它包括操作系统、服务器软件、数据库、编程语言解释器、网络配置以及其他必要的组件和设置。 服务器环境的配置对于应用程序的运行和性能至关重要。以下是一些常见的服务器环境组件&#xff1a; 操作系统&#xff1a;服务…

Python 入门

目录 编译性语言 解释型语言 Python语言介绍 Python安装 配置环境变量 Pycharm安装 Pycharm基本使用 编译性语言 解释型语言 计算机是不能理解高级语言的&#xff0c;更不能直接执行高级语言&#xff0c;它只能直接理解机器语言&#xff0c;所以使用任何高级语言编写的程…

应用于智慧金融的AI边缘计算盒子+AI算法软硬一体化方案

传统金融营业厅存在运营管理模式落后、资源投放不平衡、从业人员培训效果不达预期、客户体验割裂等普遍现象&#xff1b; 部署英码数字金融解决方案&#xff0c;将助力企业从传统金融模式快速向数字金融模式转变&#xff0c;可针对每一个客户定制个性化“一对一”服务&#xff…

基于springboot+vue的点餐系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…

【23真题】耗时一周还原,终于有真题啦!

今天分享的是23年上海电力850的信号与系统回忆版试题及解析。上电的真题资源极其稀少&#xff0c;去年我找了3份&#xff0c;全部为假&#xff01;好在今年有刚刚上岸的同学全力协助&#xff0c;为大家弄出一份回忆版真题&#xff0c;希望对大家有帮助&#xff01; 小马哥Tips…

HarmonyOs 4 (二) HelloWord

目录 一 开发工具下载安装1.1 下载安装包1.2 下载相关依赖 二 开发者注册与个人实名认证三 第一个程序2.1 创建第一个程序2.2 认识开发者界面2.3 目录结构认识2.3.1 父目录认识2.3.2 AppScope 目录2.3.3 entry目录2.3.3.1 ets 目录2.3.3.2 resources目录 2.3.4 认识配置文件2.3…

UE中记:静默自更新插件(多路径部署

自动更新系统原理说明文档 概述 本自动更新系统是一个基于Node.js的应用程序&#xff0c;用于自动检查、下载、解压并安装软件更新。它由多个脚本和一个更新服务器组成&#xff0c;能够在后台自动执行更新流程&#xff0c;确保软件保持最新状态。 组件说明 SetUp.bat: 主批…

马蹄集第34周

1.战神的对称谜题 不知道为什么超时&#xff01; def main():s input()result 0for i in range(len(s)):l i - 1r i 1while l > 0 and r < len(s) and s[l] s[r]:result max(result, r - l 1)l - 1r 1l ir i 1while l > 0 and r < len(s) and s[l] s…

Halcon 螺丝孔位定位

标定坐标&#xff1a;对整个9点标定版进行拍摄时的世界坐标HomMat2D1&#xff1a;标定后得到的换算关系孔位世界坐标&#xff1a;相机移动到孔位上的世界坐标圆心世界坐标&#xff1a;模版匹配后得到的螺丝孔位中心 相对偏移: 孔位世界坐标 - 标定坐标 目标坐标&#xff1a;圆…

【LeetCode】 160. 相交链表

相交链表 题目题解 题目 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null 。 图示两个链表在节点 c1 开始相交&#xff1a; 题目数据 保证 整个链式结构中不存在环。 注意&am…

FileInputStream 与 FileOutputStream

IO流&#xff1a;存贮和解决数据的存储方案 以上都是抽象类&#xff0c;不能创建实例 FileOutputStream 操作本地的文件&#xff0c;把文件写入本地磁盘 步骤&#xff1a; 1.创建字节输出流对象 参数是字符串表示的路径或者是File对象都是可以的如果文件不存在会创建一个新的…

redis笔记 -- 基础数据结构

redis笔记 基础的数据结构&#xff1a;string、list、hash、set、zset 容器型数据结构&#xff08;list、hash、set、zset&#xff09;通用规则 如果容器不存在&#xff0c;就创建一个&#xff0c;再进行操作如果容器里没有数据了&#xff0c;就立即删除&#xff0c;回收内存…

持续集成交付CICD:GitLabCI 运行前后端项目

目录 一、理论 1.spring项目自动构建 2.阿里云云效 Maven 3.Maven安装 4.Go安装 5.NPM安装 二、实验 1.GitLabCI 运行Maven项目 2.GitLabCI 运行Go项目 3.GitLabCI 运行NPM项目 三、问题 1.前端脚手架如何初始化项目 2.NPM下载如何指定 3.Go项目下载源如何指定 …

c++面试题

1.static的使用 1&#xff09;修饰局部变量&#xff1a;在函数内部使用static修饰局部变量&#xff0c;会使它成为静态局部变量。静态局部变量只会被初始化一次&#xff0c;且只有在第一次调用该函数时才会被初始化&#xff0c;之后每次调用该函数时都会保留上一次的值.从原来…

大数据-之LibrA数据库系统告警处理(ALM-37017 数据库连接数超限)

告警解释 当集群中单个CN实例上某个数据库的连接数超过限制时&#xff0c;产生该告警。 告警属性 告警ID 告警级别 可自动清除 37017 严重 是 告警参数 参数名称 参数含义 ServiceName 产生告警的服务名称 RoleName 产生告警的角色名称 HostName 产生告警的主机…

Vue生命周期:组件的生命之旅

&#x1f343;引言 在Vue.js中&#xff0c;每个组件都有其独特的生命周期。这个生命周期指的是组件从创建到销毁的一系列过程。了解并正确使用Vue的生命周期钩子&#xff0c;对于优化组件性能、管理组件状态以及实现特定功能至关重要。本文将详细介绍Vue的生命周期及其各个阶段…