【刷题笔记】104. 二叉树的最大深度

102 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第4天,点击查看活动详情

一、题目描述:

104. 二叉树的最大深度 - 力扣(LeetCode) (leetcode-cn.com)

给定一个二叉树,找出其最大深度。

二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。

说明: 叶子节点是指没有子节点的节点。

示例: 给定二叉树 [3,9,20,null,null,15,7]

    3
   / \
  9  20
    /  \
   15   7
返回它的最大深度 3 。

二、思路分析:

1.找终止条件:树为空的时候,此时树的深度为0,递归就结束了。

2.找返回值:需要从每一级得到的是当前这一级对应的树的最大深度,因此返回值应该是当前树的最大深度。

3.本层递归应该做什么:三个节点:root、root.left、root.right,根据第二步,root.left和root.right分别记录的是root的左右子树的最大深度。那么本层递归应该是在root的左右子树中选择较大的一个,再加上1就是以root为根的子树的最大深度,然后再返回这个深度。

三、AC 代码:

func maxDepth(root *TreeNode) int {
    if root == nil {
        return 0
    }
    leftMax := maxDepth(root.Left)
    rightMax := maxDepth(root.Right)
    return int(math.Max(float64(leftMax), float64(rightMax)) + 1)
}

四、总结:

树的题目有个有趣的地方在于,很多问题都可以简化为树根和一个左右子树的概念去解决。

这种解法,其实就是一个DFS,深度遍历。可以知道,既然深度遍历可以解决,那么广度遍历也一定可以解决。

范文参考:

ACM 选手图解 LeetCode 二叉树的最大深度(递归 + 非递归)| 编程文青李狗蛋 - 二叉树的最大深度 - 力扣(LeetCode)

【缓缓】两种巧思「 分解思维」与「遍历思维」求解二叉树的最大深度 后附拓展题 - 二叉树的最大深度 - 力扣(LeetCode)