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

【数据结构入门】二叉树(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.dtcms.com/a/325651.html

相关文章:

  • day23|前端学习三件套
  • 了解不同电磁仿真类型中的电容报告
  • 数学建模——灰色预测(GM11)
  • YOLO性能评估指标详细总结
  • Linux中DHCP配置指南指南(配实验步骤与注释)
  • 19.Linux DHCP服务
  • 108-基于Python的中国古诗词数据可视化分析系统
  • 第二章:变量与简单数据类型
  • JVM管理数据的方式
  • 深入解析Prompt缓存机制:原理、优化与最佳实践
  • k8s之CSI 卷挂载问题:同一Pod中挂载多个相同远程存储的隐含限制
  • 2025面试题——(12)
  • Vue3从入门到精通:3.1 性能优化策略深度解析
  • 思科交换机的不同级别IOS软件有什么区别?
  • android 换肤框架详解1-换肤逻辑基本
  • R语言机器学习算法实战系列(二十七)LASSO 与 Adaptive LASSO 在特征选择中的比较与应用
  • 为什么TEXT不区分大小写,而BLOB严格区分?
  • 剑桥大学最新研究:基于大语言模型(LLM)的分子动力学模拟框架,是MD的GPT时刻还是概念包装?
  • Selenium竞品价格监控爬虫(代理防封版)
  • C语言模拟 MCU 上电后程序的执行顺序 + 回调函数机制 + 程序计数器(PC)和堆栈的作用
  • PID 控制算法 | stm32 直流电机控制
  • 从零开始的云计算生活——项目实战容器化
  • 当生产环境卡成 PPT:Spring Boot 线程 Dump 捉妖指南 - 第544篇
  • AI入门学习--如何写好prompt?
  • STM32学习笔记7-TIM输入捕获模式
  • 1000w小时语音数据!语音模型Higgs Audio V2情感能力跃迁;MathCaptcha10k提升验证码识别技术
  • 主DNS部署+辅助DNS服务器部署
  • 嵌入式学习(Day24)fread/fwrite
  • 【华为机试】208. 实现 Trie (前缀树)
  • 钓鱼鱼饵制作的方式