数据结构---树和二叉树

这里写目录标题

  • 树和二叉树的定义
    • 树的定义
    • 树的基本术语
    • 线性结构和树形结构的比较
    • 二叉树的定义
      • 起因
      • 定义
  • 案例引入
    • 前缀码编码
    • 表达式的实现
    • 二叉树的抽象类型定义
  • 二叉树的性质和存储结构
    • 二叉树的性质
    • 二叉树的特殊形式
      • 满二叉树
      • 完全二叉树
    • 完全二叉树的两个性质
    • 二叉树的存储结构
      • 顺序存储结构
      • 链式存储结构
    • 遍历二叉树
      • 简介
      • 先序
      • 中序
      • 后序
  • 一级目录
    • 二级目录
    • 二级目录
    • 二级目录

树和二叉树的定义

树的定义

在这里插入图片描述
树 属于1:n的形式,属于非线性结构

在这里插入图片描述
有且仅有一个根,其余的都是子树

而字树也有自己的根和子树,所以,树是一个递归的定义
在这里插入图片描述

![在这里插入图片描述](https://img-blog.csdnimg.cn/677eb0f85d6945028e4fa02b208e06f4.png#pic_center

树的基本术语

在这里插入图片描述
结点的度:结点拥有的子树的个数,或者是分支的个数,或者是指针的个数

度=0:叶子
度!=0:分支节点或者叫内部节点

树的度:各节点度的最大值
树的深度:最大的层数(根节点为第一层),图中树的深度是四层

孩子:结点子树的根结点
双亲:与孩子反过来
例如:B是A的孩子;A是B的双亲

子孙:某节点子树中的任一个结点
祖先:从根到该结点所“途径"的"所有“结点,例如,H的祖先是A、D

在这里插入图片描述

在这里插入图片描述
一棵树也是森林,把一棵树的根结点去掉,就变成了三棵树,就是一个普通的森林,
森林加上一个双亲结点,就变成了一颗树

线性结构和树形结构的比较

在这里插入图片描述

二叉树的定义

起因

在这里插入图片描述

定义

在这里插入图片描述
注意 子树有左右之分,并且次序不能颠倒,根可以有空的左右子树

注意
在这里插入图片描述
二叉树:哪怕其中一个子树是空的 那么另一个子树也得在自己位置 并且区分左右
树:不区分左右,其中一个子树为空时,另一个只有一个位置
在这里插入图片描述

在这里插入图片描述

案例引入

前缀码编码

在这里插入图片描述

表达式的实现

在这里插入图片描述

二叉树的抽象类型定义

在这里插入图片描述
在这里插入图片描述
创建二叉树时,根据definition来构造 而definition的值分别对应着三个不同的遍历方式

二叉树的性质和存储结构

二叉树的性质

在这里插入图片描述
直接假设二叉树是满二叉树 也就是直接计算最多情况下的结点数,就是“至多”的结点数

第i层 那就是求等比数列的常数项 也就是a1*(q的n-1次方) a1是1
在这里插入图片描述
每层至少一个

在这里插入图片描述
等比数列求和

在这里插入图片描述
一共最少有k个

在这里插入图片描述
度为2:也就是有两个孩子的结点

在这里插入图片描述
证明:1.以总边数为桥梁
2.从下往上分析:每个结点头上都连着一个边,只有根结点没有,所以 总边数B=n-1(n是总结点数)
3.从上往下分析:B=2n2+1n1
(n2、n1、分别表示度为2和度为1的结点数)
4.以B为桥梁 带入n=n2+n1+n0

二叉树的特殊形式

满二叉树

在这里插入图片描述
在这里插入图片描述
满二叉树 必须每个位置都有结点 每层都要满 叶子结点必须都在最后一层

完全二叉树

在这里插入图片描述
在这里插入图片描述
要从满二叉树中连续的去掉元素而不修改 也就是编号位置不能变 结点中存放的元素也不能变 就是将完全二叉树映射到满二叉树时 没有异常的地方 可以残缺 但不可以异常 并且 一定要从左往右是连续的 不能有缺口

在这里插入图片描述

完全二叉树的两个性质

在这里插入图片描述
因为是完全二叉树 去掉最后一层 就是满二叉树 补全最后一层 也是满二叉树 所以 可以利用满二叉树的性质来构造一个不等式,

去掉最后一层 就是满二叉树 那么不等式左边就是k-1层时的总结点数
补全最后一层 就是满二叉树 那么不等式右边就是k层时的总结点数

之后简化不等式 最后一步将小于号改成去小于x的最大整数

在这里插入图片描述
因为是完全二叉树 去掉最后一层 就是满二叉树 补全最后一层 也是满二叉树 所以 可以利用满二叉树的性质来构造一个不等式,之后简化不等式 最后一步将小于号改成去小于x的最大整数

在这里插入图片描述
总结来说 除了根结点
其他结点:双亲结点的编号是【i/2】
左孩子结点是2i
右孩子结点是2i+1

如果左右孩子的编号超出了最大结点数 那么就是孩子不存在

二叉树的存储结构

顺序存储结构

在这里插入图片描述
按照满二叉树的位置定义编号 再定义一个数组 编号对应数组下标
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
空值 数组位置不能缩进 仍然保留 数值为空
所以就造成了空间的浪费
在这里插入图片描述

链式存储结构

在这里插入图片描述

在这里插入图片描述
一般会有一个头指针指向根结点,上面的结构体是对结点的定义

在这里插入图片描述
在这里插入图片描述
除了根节点 其他结点一定有双亲 那么每个双亲肯定会牺牲一个链域来存放孩子的地址 所以 空指针数目是2n-(n-1)
在这里插入图片描述

遍历二叉树

简介

在这里插入图片描述
分类
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
遍历每一个子树时 将子树也按照整棵树的遍历方式遍历 ,也就是以根结点为参考 转换根结点的参考

先序

在这里插入图片描述
先以整个树为参考 先访问根结点
之后访问左子树:这时将左子树的B 看成根结点 继续采用先序的访问方式来访问B的左子树 依次类推 直到访问到左右子树为空的叶子结点 从而完成对左子树的访问
最后访问右子树:这时将右子树中的D看成根结点 继续采用先序的访问方式来访问D的左子树 依次类推递归 直到访问到左右子树为空的叶子结点 从而完成对右子树的访问

中序

在这里插入图片描述
先访问左子树:这时将左子树的B 看成根结点 继续采用先序的访问方式来访问B的左子树 依次类推 直到访问到左右子树为空的叶子结点 从而完成对左子树的访问

后序

在这里插入图片描述

案例
在这里插入图片描述

一级目录

二级目录

二级目录

二级目录

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

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

相关文章

ubuntu目录分析

在Ubuntu根目录下,以下是一些常见文件夹的含义: /bin:存放可执行文件,包含一些基本的命令和工具。 /boot:存放启动时所需的文件,如内核和引导加载程序。 /dev:包含设备文件,用于与硬…

IntelliJ IDEA 2023.2 新版本,拥抱 AI

IntelliJ IDEA 近期连续发布多个EAP版本,官方在对用户体验不断优化的同时,也新增了一些不错的功能,尤其是人工智能助手补充,AI Assistant,相信在后续IDEA使用中,会对开发者工作效率带来不错的提升。 以下是…

Ai创作系统ChatGPT源码搭建教程+附源码

系统使用Nestjs和Vue3框架技术,持续集成AI能力到本系统! 更新内容: 同步官方图片重新生成指令 同步官方 Vary 指令 单张图片对比加强 Vary(Strong) | Vary(Subtle) 同步官方 Zoom 指令 单张图片无限缩放 Zoom out 2x | Zoom out 1.5x 新增GP…

移动IP的原理

目的 使得移动主机在各网络之间漫游时,仍然能保持其原来的IP地址不变 工作步骤 代理发现与注册 主机A:主机A移动到外地网络后,通过“代理发现协议”,与外地代理建立联系,并从外地代理获得一个转交地址,…

Nginx动静分离、资源压缩、负载均衡、黑白名单、防盗链等实战

一、前言 Nginx是目前负载均衡技术中的主流方案,几乎绝大部分项目都会使用它,Nginx是一个轻量级的高性能HTTP反向代理服务器,同时它也是一个通用类型的代理服务器,支持绝大部分协议,如TCP、UDP、SMTP、HTTPS等。 二、…

SSD市场上演大洗牌,61TB豪华「别墅」横空出世

最近几年 SSD 售价是肉眼可见的下降,相信大伙儿没少跟着喝汤吃肉吧。 有人将这些变化归结于全球市场过饱和,需求下滑。 也有人认为国产 NAND 闪存崛起是压垮 SSD 高昂售价的最后一根稻草。 在小忆看来,不论是需求矛盾还是国产崛起不过是其中…

Mysql适用于初学者的前期入门资料

文章目录 前言一、SQL语句分类二、SQL语句的书写规范三.数据库操作四、MySQL字符集1、问题① 五、UTF8和UTF8MB4的区别六、数据库对象七、数据类型八、表的基本创建1、创建表2、查看表3、删除表4、修改表结构5、复制表的结构 九、数据库字典十、表的约束1、非空约束(NOT NULL)2…

在简历上写了“精通”后,拥有工作经验的我被面试官问到窒息

前言 如果有真才实学,写个精通可以让面试官眼前一亮! 如果是瞎写?基本就要被狠狠地虐一把里! 最近在面试,我现在十分后悔在简历上写了“精通”二字… 先给大家看看我简历上的技能列表: 熟悉软件测试理论基…

2023年深圳杯数学建模B题电子资源版权保护问题

2023年深圳杯数学建模 B题 电子资源版权保护问题 原题再现: 版权又称著作权,包括发表权、署名权、修改权、保护作品完整权、复制权、发行权、出租权、展览权、表演权、放映权、广播权、信息网络传播权、摄制权、改编权、翻译权、汇编权及应当由著作权人…

微信如何提高回复信息速度?

规范流程话术有什么用?为了提高回复客户的效率和质量,可以事先设计好的一套标准化的对话模板。它通常包括多个环节和问题,帮助客服人员或销售人员在与客户沟通时,按照标准化的流程进行,以提高工作效率和客户满意度。 如…

vue中使用vab-magnifier实现放大镜效果

效果图如下: 1. 首先,使用npm或yarn安装vab-magnifier插件: npm install vab-magnifier或 yarn add vab-magnifier2. 在Vue组件中引入vab-magnifier插件: import VabMagnifier from vab-magnifier; import vab-magnifier/lib…

Element UI如何自定义样式

简介 Element UI是一套非常完善的前端组件库,但是如何个性化定制其中的组件样式呢?今天我们就来聊一聊这个 举例 就拿最常见的按钮el-button来举例,一般来说默认是蓝底白字。效果图如下 可是我们想个性化定制,让他成为粉底红字应…

ElasticSearch_学习笔记

一、初始elasticsearch 什么是elasticsearch? 一个开源的分布式搜索引擎,可以用来时限搜素、日志统计、分析、系统监控等功能。什么是elasitc stack(ELK)? 是以elasticsearch为核心的技术栈,包括 beats、L…

JAVA基础原理篇_1.1—— 关于JVM 、JDK以及 JRE

目录 一、关于JVM 、JDK以及 JRE 1. JVM 2. JDK 3. JRE 二、为什么说 Java 语言“编译与解释并存”? 2.2 将高级编程语言按照程序的执行方式分为两种: 2.2 Java的执行过程: 2.3 所以为什么Java语言“编译与解释"共存&#xff1a…

【已解决】电脑连上网线但无法上网

文章目录 案例情况解决方案必要的解决方法简要概括详细步骤1、打开控制面板2、打开更改适配器设置3、 找Internet协议版本44、修改配置 可能有用的解决方法 问题解决原理Internet 协议版本 4(TCP/IPv4)确保IP地址和DNS服务器设置为自动获取 案例情况 网…

《翻开收藏夹,拾起行动的力量》

文章目录 每日一句正能量前言分享一道收藏的好题分享一个收藏的便捷技巧积灰这么久,这个当时被收藏的东西对现在的你还有用吗?后记 每日一句正能量 很喜欢一个字,淡,平淡的淡,其实很不平淡,蕴含着很多人生哲…

SpringBoot基础篇-在IDEA中隐藏文件或文件夹(超详细版)

正常创建一个SpringBoot项目有如下文件: 通常我们创建一个springboot项目时会自动生成一些暂时用不到的文件,稍许有些碍眼,对于喜爱项目结构整洁清晰的人更是十分别扭,但那些文件可能后面又会用到,所以这里给一个小技巧…

51单片机——串行口通信

目录 1、51单片机串口通信介绍 2、串行口相关寄存器 2.1 、串行口控制寄存器SCON和PCON 2.1.1 SCON:串行控制寄存器 (可位寻址) 2.1.2 PCON:电源控制寄存器(不可位寻址) 2.2、串行口数据缓冲寄存器SBUF 2.3、从机地址控制…

链表刷题常用技巧——快慢指针

强大,不动如山的强大,不会输给自己的真正的强大。 往期回顾: 数据结构——单链表 单链表力扣刷题 文章目录 经典例题:链表的中间结点 题目分析及双指针思路引入 双指针图解 leetcode 核心代码 判断环形链表——快慢指针…

Ubuntu Server版 之 apache系列 安装、重启、开启,版本查看

安装之前首先要检测是否安装过 apt list --installed | grep tool tool:要检测的名称,如mysql、apache 、ngnix 等 安装 apache sudo apt install apache2 安装apache 默认是开启的 可以通过浏览器 检测一下 service apache stop # apache 停止服务…