当前位置: 首页 > news >正文

【数据结构】二叉树概念 | 满二叉树 | 完全二叉树

二叉树的概念

二叉树在实践中用的很多。

一棵二叉树是结点的一个有限集合,该集合:

  • 或者为空
  • 一个根结点加上两棵别称为左子树右子树的二叉树组成。
  • 二叉树最多两个孩子

这里注意:二叉树并不是度为2的树

二叉树的度最大值是2,并不是说它的度一定为2。所以一下这四种情况也均是二叉树:

  • 空树
  • 只有根节点
  • 只有左子树
  • 只有右子树
  • 左右子树均存在

二叉树不存在度大于2的节点;

二叉树的子树有左右之分次序是不能颠倒的,因此二叉树是有序树

二叉树通俗也可以理解为对树进行了“计划生育”。 “计划生育”也就是生两个小孩,但是是每一家来说都是生两个吗?

那么度为2的一定是二叉树吗?

  • 度为2一定是二叉树。度为2的话,那么所有节点的最大的度就是2,而二叉树的概念是不存在度大于2的节点。
  • 二叉树是一个特殊的树,它的度最大为2,但是并没有说一定为2。

特殊的二叉树

满二叉树

一个二叉树,如果每一个层的结点数都达到最大值,那么这个二叉树就是满二叉树。也就是说,如果一个二叉树的成熟为K,那么结点总数就是2^{K}-1,那么它就是满二叉树。

根据上图:

  • 假设高度为h,那么就会有2^{h}-1的节点;
  • 那么假设树有N个节点的话,那就是 2^{h}-1=N;那么 高度就为 h=\log _{2}(N+1)

完全二叉树

完全二叉树,前h-1层都是满的,最后一层不一定满,但是从左到右必须连续

完全二叉树是效率很高的数据结构,完全二叉树是由满二叉树而引出来的。对于深入为K的,有n个节点的二叉树,当且仅当其每一个节点都与深度为K的满二叉树中编号从1至n的结点一一对应时称之为完全二叉树。要注意的是满二叉树是一种特殊的完全二叉树。

这里注意二叉树顺序是固定的,必须是连续的。

假设完全二叉树的高度为h,那么它的结点数量是多少呢?

完全二叉树的最后一层的范围: \left [ 2^{h-1},2^{h}-1 \right ]

思路:

  • 这里我们想在满二叉树中,结点数为2^{h}-1
  • 那么满二叉树中的上一层就是有2^{h-1}-1
  • 因为完全二叉树就是满二叉树的基础上,最后一层不满,也就是最后一层的结点数最多有2^{h-1},最少有1个;
  • 所以根据等比公式可以求得出完全二叉树最后一层的范围为: \left [ 2^{h-1} , 2^{h}-1 \right ]

相关文章:

  • redis的一些操作
  • Servlet+JSP小型超市管理系统
  • 卷积神经网络(CNN)识别验证码
  • 野指针详解
  • Oracle中文显示???????解决办法
  • 为什么 Flink 抛弃了 Scala
  • 2023年P气瓶充装证模拟考试题库及P气瓶充装理论考试试题
  • C++:一文读懂智能指针
  • js修改浏览器地址栏里url的方法
  • python -opencv 中值滤波 ,均值滤波,高斯滤波实战
  • 汽车电子 -- 根据DBC解析CAN报文
  • 电力感知边缘计算网关产品设计方案-网关系统通信架构方案
  • 生产环境出现问题,测试人如何做工作复盘?
  • 最重要的BI测试-适用于任何BI和分析平台
  • 看完就会,从抓包到接口测试的全过程解析【1500字保姆级教程】
  • @angular/forms 源码解析之双向绑定
  • Android Studio:GIT提交项目到远程仓库
  • Django 博客开发教程 16 - 统计文章阅读量
  • Docker入门(二) - Dockerfile
  • FastReport在线报表设计器工作原理
  • js 实现textarea输入字数提示
  • Laravel核心解读--Facades
  • Logstash 参考指南(目录)
  • mongo索引构建
  • ReactNativeweexDeviceOne对比
  • Service Worker
  • vue从创建到完整的饿了么(11)组件的使用(svg图标及watch的简单使用)
  • Wamp集成环境 添加PHP的新版本
  • 分享一个自己写的基于canvas的原生js图片爆炸插件
  • 猴子数据域名防封接口降低小说被封的风险
  • 罗辑思维在全链路压测方面的实践和工作笔记
  • 前端性能优化——回流与重绘
  • 区块链技术特点之去中心化特性
  • 时间复杂度与空间复杂度分析
  • ​flutter 代码混淆
  • # Swust 12th acm 邀请赛# [ K ] 三角形判定 [题解]
  • #define用法
  • %3cli%3e连接html页面,html+canvas实现屏幕截取
  • (1)(1.9) MSP (version 4.2)
  • (2)关于RabbitMq 的 Topic Exchange 主题交换机
  • (51单片机)第五章-A/D和D/A工作原理-A/D
  • (C#)Windows Shell 外壳编程系列4 - 上下文菜单(iContextMenu)(二)嵌入菜单和执行命令...
  • (二)PySpark3:SparkSQL编程
  • (附源码)springboot掌上博客系统 毕业设计063131
  • (附源码)ssm捐赠救助系统 毕业设计 060945
  • (译)2019年前端性能优化清单 — 下篇
  • (转)http-server应用
  • .NET Core中Emit的使用
  • .net redis定时_一场由fork引发的超时,让我们重新探讨了Redis的抖动问题
  • .NET/C# 将一个命令行参数字符串转换为命令行参数数组 args
  • .NetCore项目nginx发布
  • .Net程序猿乐Android发展---(10)框架布局FrameLayout
  • @entity 不限字节长度的类型_一文读懂Redis常见对象类型的底层数据结构
  • @SpringBootApplication 包含的三个注解及其含义
  • [ vulhub漏洞复现篇 ] Grafana任意文件读取漏洞CVE-2021-43798