二叉树 1

1 基本构成

度为 2 的树 最大有两个孩子

类比计划生育 中最多 二胎

可以 0个就是空树 可一个 可两个 只限定最大值

理解1 就是由 根节点 和两个 左右 子树构成 或者 子树为空

理解2 每个节点下 有两个节点 其中 节点可为空

其次单个节点 也可以视作 子树

严格定义(数据结构标准说法)

  • 子树:由一个根节点,加上它所有后代节点共同构成的集合。

- 叶子节点(没有孩子的节点):只有自己这一个节点,没有后代,依然满足「根节点+后代(空)」的规则,所以它本身就是一棵单节点子树。

只要有根,就能叫子树;单节点,是最小的子树

2 满二叉树 和 完全二叉树

一、满二叉树(完美二叉树)

定义每层结点都达到最大数量,没有缺结点:

除叶子结点外,所有节点都有左右两个子节点;

所有叶子结点在同一层。

计算 满二叉树 的总节点数

sum = 2^0 + 2^1+......+2^(h-1)

利用等比数列求和公式

Sum = 2 ^ h -1

二、完全二叉树

定义
按从上到下、从左往右顺序依次填满结点,只允许最后一层右侧缺叶子:
最后一层外,上面所有层都是满二叉树;

zhong yao

最后一层结点靠左连续排布,右侧空缺,

不能中间空、右边有结点


3 物理结构(存储结构) 和 逻辑结构

简单来说,逻辑结构是我们 "脑海中" 对数据关系的抽象,

而物理结构是数据在 "计算机内存中" 的真实安家方式。

两者的核心区别在于视角

物理结构描述数据在介质上的实际存放方式

连续存储(如C数组)把元素一个接一个排在内存里;

离散存储(如链表节点)则分散在各处,用指针串联。磁盘上文件系统的块分配也属于这一层面。

程序员通常不直接操控这一层,操作系统和硬件负责管理**。**

逻辑结构描述数据元素之间的抽象关系,与存储在哪里无关。常见类型:

  • 线性:一对一(数组、链表、队列、栈)
  • 树形:一对多(二叉树、B树、堆)
  • 图形:多对多(有向图、无向图)
  • 集合:无特定顺序关系

关键联系**:同一种逻辑结构可以用不同物理结构来实现。**

比如"栈"(逻辑上是线性后进先出)既可以用连续的数组实现,

也可以用离散的链表实现------逻辑行为一样,物理布局截然不同。

个人理解

简单来看就是 受限于已有的物理空间的存储结构来实现抽象的逻辑结构

比方说 堆 就想象为 用数组 实现的 二叉树

在代码上操作的是数组 想象在操作一棵树一样的感觉

优秀的程序员,就是在死板的、受限的物理内存之上,

通过精妙的算法,搭建出极其灵活且复杂的逻辑世界。

4 利用 数组 实现 完全二叉树

带着结论看问题

1 从根节点开始 从左至右 从上到下 下标从0开始 存储节点

就是利用 结构体数组 实现完全二叉树 有什么好处嘛?

2 优势 利用下标计算 ( 完全二叉树 包含 满二叉树 ) 父子关系

思考一下 假设父亲的下标是 i 求孩子下标

左孩子 的下标表达式为 就看 A和B就好 不就是 i+1嘛?这对吗

不对 多看机组 用数学归纳法 看出 普遍的规律 B和 D 还有 C和F

**明显是 2i+1 得出结论1:**左孩子 的下标表达式为 2i+1

同理可得 右边的孩子呢?

就是 2i+2 也可以理解为就是 在左孩子的下标 +1 不就是相邻的嘛 而且是有序的 右 孩子 的下标表达式为 2i+1+1 **==**2i+2

直接自己去 验证 没毛病的

假设 孩子的节点的下标为 j 求父亲的下标

不就是反过来嘛? 如果为奇数就 下标-1 再/2

如果为偶数那不就 下标-2 再/2

不不不 我们可以统一起来

因为 整数除法向下取整的原则 所以

不论是偶数还是奇数 都可以用 (下标 - 1 ) /2

(5 -1)/2 和 (6-1)/2 结果都是 2

最后 得出结论

假设 孩子的节点的下标为 j 父亲的下标 === ( j-1) /2


5 注意 上述结论的前提最后好 是 完全二叉树

像上图中 就必须将空出来的位置 保留下来 使得能够 正常表示并计算父子关系 浪费空间

相关推荐
Tisfy3 小时前
LeetCode 3345.最小可整除数位乘积 I:暴力枚举(从n开始尝试)
数学·算法·leetcode·题解·枚举
DolphinDB智臾科技3 小时前
告别 TB 级数据搬运:DolphinDB 滤波算法库,重塑物联网数据价值链
物联网·算法
可编程芯片开发4 小时前
基于双PI控制器结构的六步逆变器供电无刷直流电机调速simulink仿真
算法
Sagittarius_A*4 小时前
后量子密码|通识认知 02|量子威胁核心原理:Shor 算法如何击穿传统公钥密码
算法·信息安全·密码学·量子计算
青山木4 小时前
Hot 100 --- 在排序数组中查找元素的第一个和最后一个位置
java·数据结构·算法·leetcode
其美杰布-富贵-李4 小时前
聚类算法详解:K-means、层次聚类与 DBSCAN
算法·机器学习·kmeans·聚类
碧海银沙音频科技研究院5 小时前
4 BES2710编译环境搭建方法
嵌入式硬件·算法
mifengxing5 小时前
LeetCode 238 除自身以外数组的乘积|无除法O(n)时间+O(1)空间双解法
java·算法·leetcode
依然鸣5 小时前
PTA团体程序设计天梯赛L2真题讲解L2-045-048
数据结构·c++·经验分享·学习·算法·pat考试·pat
丢掉幻想准备斗争5 小时前
5.5树与二叉树的应用
算法