(a)树

官方信息技术老师·10 页·深入(追求细节与边界)·0 次浏览·3 天前
二叉树遍历重构递归套路边界case

(a)树

吃透四种遍历、重构与递归套路,边界 case 一次理清

按 空格/→ 演示下一步

1 / 10 页

全部页面点击任意一页,跳回舞台从这页播放

二叉树遍历重构递归套路边界case

(a)树

吃透四种遍历、重构与递归套路,边界 case 一次理清

1第 1 页 · (a)树

动机

你维护一个有 100 万条记录的通讯录。用数组存,插入一人要移动大量元素;用链表存,查找一人要遍历到尾。能否兼顾查找效率与动态更新?树正是为解决这一矛盾而诞生的。

线性结构的痛点
数组插入 O(n)、链表查找 O(n),无法兼顾速度与有序
树的双重承诺
同时提供有序遍历与对数级 O(log n) 增删查——前提是树保持平衡
天然适配层次数据
文件系统、组织结构、DOM、语法树均带天然父子关系
核心约束
单一根节点、无环连通、有限节点——区别于一般图
公司组织架构图对应 →树的层次结构

总经理是根、部门是中间节点、员工是叶子;上下级汇报关系对应边

2第 2 页 · 动机

应用

前面看了树长什么样、为什么非树不可。这一页反过来:它到底用在哪?你日常用的文件系统、数据库、编辑器,背后都有树的身影。

文件系统
磁盘里的目录与文件天然是树形,递归遍历即可枚举
搜索结构
BST、AVL、红黑树,平衡时 O(log n) 完成增删查
堆与优先队列
完全二叉树实现,O(1) 取最值,O(log n) 调整
字典树 Trie
把字符串拆到字符层级,前缀匹配极快
数据库索引
B+ 树让磁盘顺序读最大化,是 InnoDB 的核心
现实世界的层级关系对应 →计算机中的树应用

公司组织、家谱、图书分类这类天然有上下级、包含关系的事,都适合用树建模

3第 3 页 · 应用

有根树

上一页我们认识了树——任意两节点间恰有一条路径的连通图。但树上没有「方向」。实际应用中,我们常需要从某个特定节点出发,往下走、往下查。这就需要给树一个起点。

根节点
指定一个节点为根,所有路径与层次的度量都以它为原点
父子关系
除根外每个节点有且仅有一个父节点,边由父指向子,树变成有向结构
深度与高度
深度=根到该节点的边数;高度=该节点到最远叶子的边数,根的高度即整棵树高
递归子树
任一节点与所有后代构成一棵子树,与原树同形,可递归处理
有序 vs 无序
子节点是否区分左右次序——影响遍历结果唯一性,二叉树中尤其关键
家谱族谱对应 →有根树

始祖=根,子孙=后代分支,每个人有唯一父辈,可向上追溯单线祖先

4第 4 页 · 有根树

有序树

有序树:定义、要点与典型应用

有序树
有序树:定义、要点与典型应用
5第 5 页 · 有序树

路径+环路

上一页我们给树加上了「有序」约束。本页回到树作为图本身的结构——拆解两个核心特征:任意两顶点之间路径唯一、整棵树不存在环路。这两条性质恰好是把树和「普通图」划清界限的标准。

路径 Path
相邻顶点首尾相接、且顶点不重复的顶点序列
环路 Cycle
起点与终点重合、长度 ≥3 的路径,又称圈
路径唯一
树中任意两顶点之间恰有一条简单路径
无环性
树不含环路;等价地,连通且无环 ⟺ 树
城市地铁换乘对应 →树的路径与无环

任意两站只一条线串起来,没有环线绕回原地

$连通 \wedge 无环 \Longleftrightarrow 树 \Longleftrightarrow |E|=|V|-1$
6第 6 页 · 路径+环路

连通+无环

上一节我们看到,环就是绕回起点的路径,树里不允许出现这种东西。再加一条要求:任意两个顶点之间都得有路可走。这两条合起来,就是树的「定义式」。

连通
图中任意两个顶点之间都存在路径相连,没有孤岛
无环
不存在任何绕一圈回到起点的环路
充要条件
连通且无环 ⟺ 是树 ⟺ 恰有 n−1 条边,三者等价
加边必生环
给树任意加一条边,必产生唯一一条环路
岛屿间的桥对应 →连通无环的图

岛=顶点、桥=边。n 个岛用 n−1 座桥时,每岛可达且无绕回

E=n1|E| = n - 1
7第 7 页 · 连通+无环

深度+层次

上一节我们看到,树是连通且无环的图。但光有「形状」还不够——我们还要说清每个节点离根有多远,这就是深度。

节点深度
从根沿唯一路径到该节点的边数
树的层次
同一深度的所有节点构成一层
树的高度
等于根到最深叶子的边数,即最大深度
起算约定
根深度算 0 还是 1,两种约定并存
大楼楼层对应 →树的深度与层次

楼层号即节点深度,同楼层的房间即同层节点

8第 8 页 · 深度+层次

本节要点

  • 树是n点n-1边的极简连通图
  • 连通+无环 ⇔ 树 ⇔ 任意两点路径唯一
  • 删任一边断连,加任一边成环
  • 有根树才谈深度,有序树才能唯一编码
延伸主题:二叉树与遍历(前中后序)最小生成树森林与连通分量
9第 9 页 · 本节要点

课后思考

三道开放题,先独立思考,再对照参考答案理清思路。

1为什么树必须同时满足「连通」和「无环」?去掉任一条件,图会退化成什么?

参考答案缺连通则退化成森林(不连通),缺无环则路径不唯一。两者共同保证 n 节点恰好 n−1 条边,这是树的本质特征。

2如果限定每个节点最多两个子节点,原本的有序树会获得哪些额外便利?

参考答案左右子节点天然区分,可引入二叉、满、完全等形态;许多遍历与检索算法只在这种结构下成立。

3无环但不连通的图称为「森林」,它与有根树之间是什么关系?能否统一描述?

参考答案森林是多棵有根树的并集,每棵仍是有根树。可把『森林』作为整体概念,仍保留深度、子树等定义。

10第 10 页 · 课后思考