携手创作,共同成长!这是我参与「掘金日新计划 · 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)