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

【数据结构入门】二叉树(1)

目录

1.二叉树的概念

2.特殊的二叉树

2.1 满二叉树

2.2 完全二叉树

3. 二叉树的三个公式

3.1 求K层满二叉树有多少节点

3.2 求第K层非空二叉树中最多有多少节点

3.3 度为0和度为2的结点之间的关系

4.二叉树题目

4.1 题目一

4.2 题目二

4.3 题目三

4.4 题目四

5. 推导结论

满二叉树公式:

完全二叉树公式:

满二叉树的高度:

完全二叉树的高度:

6.二叉树的数据存储


        本期内容是在《树》的基础上进行的拓展,没有学习的读者,可以点击前面的跳转链接进行学习。

        上一期内容讲了树,树其实本质上就是根 + 它的子树,在一棵树中的任意一个节点都满足此规律,所以树是一个递归结构

1.二叉树的概念

        就是度为2的树。每个结点最多有两个孩子,第一个孩子叫做左孩子,第二个孩子叫做右孩子。下图就是生活中真实的“二叉树”。

2.特殊的二叉树

2.1 满二叉树

        一个二叉树,每一层的结点达到最大值,这个二叉树就是满二叉树,如果说这个二叉树的层数是K,那么这个结点的总数是:

2^{K} - 1

2.2 完全二叉树

        完全二叉树是一个效率很高的数据结构,完全二叉树是由满二叉树引出来的,对于深度为K的,有N个节点的二叉树,当前晋档每一个节点都与深度为K的满二叉树中编号从1到N的结点一一对应时,称之为完全二叉树,满二叉树是一种特殊的完全二叉树。

        说人话就是前K-1层必须是满二叉树,最后一层可以不满,但是最后一层的结点必须是从左到右连续存放的

下面这张图就是讲过的概念的包含顺序,其中树的概念最大。

3. 二叉树的三个公式

根结点所在的层数是1;

3.1 求K层满二叉树有多少节点

2^{K} - 1

3.2 求第K层非空二叉树中最多有多少节点

2^{K-1}

3.3 度为0和度为2的结点之间的关系

        度为0其实就是叶子结点,度为2就是既有左孩子还有右孩子的节点。

n0 = n2+1

4.二叉树题目

4.1 题目一

叶子结点的数目 = 度为2的结点数目 + 1 = 199 + 1 = 200

选B

4.2 题目二

设叶子节点个数为N0,度为2的节点的个数是N2,度为1的节点的个数是N1,有N0 = N2 + 1、

N1 + N2 + N0 = 2n;带入得2N0 - 1 + N1 = 2n,化简2N0 + N1 = 2n + 1,因为是2n个节点(偶数个),说明一定是下面这种情况:一定会存在一个节点的度是1,又因为这是完全二叉树,也就是说有且仅有一个节点度为1,N1是1,那么N0就是n,选A。

4.3 题目三

        2的9次方-1 = 511,说明9层满二叉树的节点个数是511,而531比9层满二叉树节点个数还要多,说明至少是10层,2的10次方-1 = 1023远大于531,说明这是一个10层不满的完全二叉树。

选B

4.4 题目四

        从上一题推断这是一个不满10层的二叉树,767 - 满9层二叉树511 = 256,也就是说最后一层有256个节点,占用了第9层的128个节点,第九层有2的8次方个即256个数据,被占用了128个数据,还剩128个数据没有孩子,再加上第10层原本的256个没有孩子的节点,那么就有384个叶子结点。

选B

5. 推导结论

N个节点高度是h;

满二叉树公式

N = 2^{h}-1

完全二叉树公式

        N = 2^{h}-1 -X

        这里的x是最后一层可能存在的节点个数,如果X=0,那么就是满二叉树,如果是最后一层所有的节点之和,那么就会退化到上一层,所以X必须是最后一层所有结点之和-1,保证最后一层至少有一个节点

所以X的取值范围是:

X\in \left \{ 0,2^{h-1}-1\right \}

完全二叉树节点的范围

 2^{h-1}~2^{h}-1 

满二叉树的高度:

        \log_2 (N + 1)

完全二叉树的高度:

高度最小值

                将x=0带入:

                           h=\log_2 (N +1)                                 

高度最大值

                 将x=  2^{h-1}-1带入:

N = 2^{h}-1 -(2^{h-1}-1)

即:

N = 2^{h-1}(2 - 1)

N = 2^{h-1}

最后:

h = \log_2 (N)+1

完全二叉树高度的范围

h=\log_2 (N +1) ~h = \log_2 (N)+1

6.二叉树的数据存储

对于完全、满二叉树而言适合用数组来存储,将每一层的数据按顺序存储到数组中。

已知当前节点的下标为i,就可以求出左孩子的下标为

2*i+1

求出右孩子的下标为:

2*i+2

已知孩子的下标为i,那么父结点的下标为

(i-1)/2

对于非完全二叉树,使用数组存储,会有空间的浪费

可以使用链式存储

http://www.xdnf.cn/news/17495.html

相关文章:

  • Redis7 GEO功能介绍与电商场景案例解析
  • Android模块化架构深度解析:从设计到实践
  • HTML5中华美食网站源码
  • (Arxiv-2025)Phantom-Data:迈向通用的主体一致性视频生成数据集
  • LangChain框架之 invoke() 方法
  • 【SpringBoot】02 基础入门-什么是Spring Boot?:Spring与SpringBoot
  • CLIP在文生图模型中的应用
  • Unity笔记(五)知识补充——场景切换、退出游戏、鼠标隐藏锁定、随机数、委托
  • redis笔记(二)
  • 深入解析游戏引擎(OGRE引擎)通用属性系统:基于Any类的类型安全动态属性设计
  • 《深度剖析前端框架中错误边界:异常处理的基石与进阶》
  • Rust 实战五 | 配置 Tauri 应用图标及解决 exe 被识别为威胁的问题
  • 麒麟系统使用-PATH设置
  • 【96页PPT】华为IPD流程管理详细版(附下载方式)
  • 34-Hive SQL DML语法之查询数据-3
  • 游戏盾是什么?
  • Vibe Coding 自然语言驱动 AI 编程方式
  • 在Linux中部署tomcat
  • Android Coil3视频封面抽取封面帧存Disk缓存,Kotlin
  • 自然语言处理实战:用LSTM打造武侠小说生成器
  • GraalVM !拥抱云原生的 JVM
  • Python 的浅拷贝 vs 深拷贝(含嵌套可变对象示例与踩坑场景)
  • 人工智能正在学习自我提升的方式
  • TF-IDF提取关键词(附实战案例)
  • 商业解决方案技术栈总结
  • CVPR医学图像三套创新方案:通用分割+3D高效解码+SSM肿瘤定位(附链接)
  • 算法训练营day44 动态规划⑪ 1143.最长公共子序列、1035.不相交的线、53. 最大子序和、392.判断子序列
  • 【Redis】持久化方案——RDB和AOF
  • Vue3从入门到精通: 2.5 Vue3组件库开发与设计系统构建
  • 海关 瑞数 失信企业 逆向 分析 后缀 rs