二叉树 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 注意 上述结论的前提最后好 是 完全二叉树

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

相关推荐
奋发向前wcx5 小时前
CSP-J复赛模拟赛4 王晨旭补题 2026.10.5
算法
念何架构之路7 小时前
zap采样器与性能优化内幕
算法·性能优化·哈希算法
晒太羊的猫8 小时前
hot100动态规划刷题
算法·动态规划
weixin_531094698 小时前
heap_4内存管理
java·开发语言·算法
余额瞒着我当琳8 小时前
红黑树的实现--红黑树的概念、规则、效率、结构、旋转、查找、验证
数据结构·c++·算法
程序员南飞9 小时前
win系统安装minio
java·数据结构·算法
青少儿编程课堂9 小时前
AC自动机多模式串匹配精讲:校园关键词巡检实战解析
c++·python·算法·bfs·信息学竞赛
longlongzihan9 小时前
LeetCode 5. 最长回文子串:从暴力匹配到中心扩展的思维演进
c++·算法·leetcode
waoooqwe9 小时前
问卷样本真实吗
大数据·数据库·算法·数据分析
苦瓜打怪兽9 小时前
leetcode 热题100(11. 盛最多水的容器)
python·算法·leetcode