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

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

相关推荐
雨落在了我的手上1 小时前
Java数据结构(二):时间和空间复杂度
数据结构
悠仁さん2 小时前
list 链式表基本功能模拟实现(双向有头指针循环链表)
c语言·数据结构·链表·list
吴可可1232 小时前
AutoCAD 2024搭配C#开发最佳实践
算法
Stick_ZYZ2 小时前
从 Prompt 到 Context Engineering:Agent 真正稳定的关键
大数据·人工智能·算法·ai·prompt
ZHW_AI课题组2 小时前
使用Stable Diffusion v1.5文本引导与无分类器引导(CFG)算法实现条件生成图片
人工智能·python·算法·机器学习·stable diffusion
xxwxx__2 小时前
栈(Stack)详解:概念、实现与避坑指南
c语言·数据结构
黎阳之光2 小时前
数字孪生赋能智慧油站建设|黎阳之光全场景可视化安防管控平台落地应用
大数据·物联网·算法·安全·数字孪生
少司府2 小时前
C++进阶:map和set的使用
开发语言·数据结构·c++·容器·stl·set·map
cpp_25012 小时前
P11375 [GESP202412 六级] 树上游走
数据结构·c++·算法·题解·洛谷·树形结构·gesp六级