树的高度/深度

一句话说明

树的高度就是“从当前节点往下还能走多远”,本质上是一个后序问题。

(附件 bfs-layer-traversal.gif 未随站点发布)

先分清概念

  • height(node):当前节点向下到最深叶子的长度
  • depth(node):根节点到当前节点的长度
  • 刷题里说“最大深度”,通常就是整棵树的高度

Go 代码:最大深度

func maxDepth(root *TreeNode) int {
    if root == nil {
        return 0
    }
    left := maxDepth(root.Left)
    right := maxDepth(root.Right)
    if left > right {
        return left + 1
    }
    return right + 1
}

Go 代码:最小深度

func minDepth(root *TreeNode) int {
    if root == nil {
        return 0
    }
    if root.Left == nil {
        return minDepth(root.Right) + 1
    }
    if root.Right == nil {
        return minDepth(root.Left) + 1
    }
 
    left := minDepth(root.Left)
    right := minDepth(root.Right)
    if left < right {
        return left + 1
    }
    return right + 1
}

易错点

最小深度最容易写错

单子树不能直接取 min(left, right) + 1,因为空分支不是叶子。

相关主题


返回:树算法 | 算法学习导航