AlgoMooc

二叉树

13 / 28基础内容

数据结构动画

二叉树

加载中
正在加载动画引擎...

本课导读

树是会分叉的结构,像公司组织架构:一个根,往下层层分子节点。文件夹、网页结构、家谱都是树。

你将学到
  • 根 / 节点 / 叶子 / 二叉树等概念
  • DFS(深度优先)与 BFS(广度优先)两种遍历
  • 二叉搜索树为什么查找快到 O(log n)

树是什么

树是一种非线性数据结构,像一棵倒挂的树:最上面是,下面分出节点,最末没有子节点的叫叶子。从根到某个节点经过的边数叫深度。例如,家族族谱就是一棵树——爷爷是根,爸爸是节点,你是叶子。

二叉树

二叉树是每个节点最多有两个子节点的树,分别叫左孩子右孩子。它是最常用的树结构,因为简单且适合递归处理。比如,一个文件夹下最多两个子文件夹,就是二叉树。

遍历:DFS(前中后序)与 BFS(层序)

遍历就是按某种顺序访问所有节点。DFS(深度优先搜索)沿着一条路走到黑再回头,分为三种:

  • 前序:根 → 左 → 右(先处理当前节点)
  • 中序:左 → 根 → 右(对二叉搜索树可得到排序结果)
  • 后序:左 → 右 → 根(先处理子节点)

BFS(广度优先搜索)也叫层序,一层一层从上到下访问,像排队一样。

二叉搜索树:左小右大、查找 O(log n)

二叉搜索树(BST)是一种特殊的二叉树:对于任意节点,左子树所有值 < 节点值 < 右子树所有值。查找时,每次比较就能排除一半,所以平均时间复杂度是 O(log n),就像查字典时翻到中间页。

为什么要平衡(否则退化成链表)

如果插入数据有序(如1,2,3,4),BST会变成一条斜线,退化成链表,查找时间变成O(n)。为了避免这种情况,需要平衡——让左右子树高度差不超过1(如AVL树、红黑树),保证操作始终高效。

结构平均查找最坏查找
平衡BSTO(log n)O(log n)
不平衡BSTO(log n)O(n)

BST 的插入与删除

插入:和查找一样,一路比大小往下走,遇到空位就把新节点挂上,时间 O(log n)。

删除分三种情况:

  • 叶子节点:没有孩子,直接摘掉。
  • 只有一个孩子:让那个孩子直接顶上来。
  • 两个孩子:找它的中序后继(右子树里最小的节点)来顶替它的位置,这样「左小右大」依然成立。
吴师兄提示:口诀:DFS 用栈,BFS 用队列。

学完练一练

把刚学的结构放进 LeetCode 题里用一次。

去图解题库实战