二叉树的深度和高度定义方向相反:深度从根向下数边数,高度从节点向上到叶数边数;整棵树二者数值相等,但节点级含义不同。
二叉树的深度和高度不是一回事,虽然数值上有时相等,但定义方向、计算起点和适用场景都不同。理解它们的精确定义,是建模递归逻辑、分析时间复杂度、判断平衡性(如 avl 树)的前提。
节点的深度:从根向下数边
节点的深度指从根节点到该节点所经过的边数。根节点深度为 0;它的直接子节点深度为 1;孙子节点深度为 2,依此类推。深度反映的是“位置层级”,与树的根绑定,天然具有自顶向下的方向性。
- 空节点(nullptr)无深度
- 深度最大值 = 整棵树的高度(当树为链状或满二叉树时取等)
- 层序遍历中,同一层所有节点深度相同
节点的高度:从该节点向上看最远叶节点
节点的高度指从该节点出发,到其任意叶子节点的最长路径上的边数。叶子节点自身高度为 0;若某节点只有左子树且左子树高度为 3,则该节点高度为 4(3 + 1 条边)。
- 空节点高度通常定义为 -1(便于统一递归公式:height = max(left_height, right_height) + 1)
- 非叶子节点高度 = max(左子树高度, 右子树高度) + 1
- 整棵树的高度 = 根节点的高度
树的高度 vs 树的深度:数值一致,但来源不同
整棵二叉树的高度和深度在数值上恒等,都等于根节点的深度(即 0)与最深叶子节点深度的最大值。但二者推导路径相反:高度由底向上累积,依赖子树结果;深度由顶向下延伸,依赖父节点状态。
- 高度适合用于后序遍历建模(如求直径、判断平衡)
- 深度适合用于前序/层序建模(如找最小深度、按层处理)
- 数学表达上,设 d(v) 为节点 v 的深度,h(v) 为节点 v 的高度,则对任意节点 v,有 d(v) + h(v) ≤ 树高,等号仅在 v 位于某条最长根-叶路径上时成立
用高度建模平衡性:一个典型数学关系
平衡二叉树要求每个节点的左右子树高度差绝对值 ≤ 1。这可形式化为:∀v ∈ T, |h(v.left) − h(v.right)| ≤ 1。该条件天然适配后序遍历——先得左右子树高度,再验证并回传当前节点高度。
- 返回值可设计为:非负数表示子树高度,−1 表示已失衡
- 递推式:h(v) = (left_ok ∧ right_ok ∧ |hₗ − hᵣ| ≤ 1) ? max(hₗ, hᵣ) + 1 : −1
- 该建模将结构约束转化为数值不等式,是变量关系驱动的典型算法设计

















