登录
首页 >  文章 >  java教程

二叉树深度与高度区别详解

时间:2026-05-30 15:18:49 412浏览 收藏

二叉树的深度与高度虽在整棵树层面数值相等,却本质不同:深度从根向下计量边数,刻画节点在树中的层级位置;高度从节点向上至最远叶子计量边数,反映其子树的延伸能力——二者方向相反、起点相异、适用场景分明,精准区分它们不仅是理解层序与后序遍历逻辑的关键,更是实现平衡性判断(如AVL树)、求解树直径、分析递归复杂度等核心算法的基石。

二叉树的深度和高度不是一回事,虽然数值上有时相等,但定义方向、计算起点和适用场景都不同。理解它们的精确定义,是建模递归逻辑、分析时间复杂度、判断平衡性(如 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
  • 该建模将结构约束转化为数值不等式,是变量关系驱动的典型算法设计

到这里,我们也就讲完了《二叉树深度与高度区别详解》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!

资料下载
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>