开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第5天,点击查看活动详情
一、题目描述:
给定一个二叉树,找出其最大深度。
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
说明: 叶子节点是指没有子节点的节点。
示例:
给定二叉树 [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回它的最大深度 3 。
二、思路分析:
二叉树的最大深度 是 根节点 到 最远叶子节点的路过的节点数。
所以我们可以求解左右子树的最大深度再加1。
同理 我们发现 左右子树最大深度和其父节点求解过程类似 所以可以一直递归下去 不停的求解当前节点的最大深度加一,然后告诉父节点。
我们使用前序遍历遍历,等遍历到叶子结点的时候,我们就对当前深度进行判断比较即可。
三、AC 代码:
class Solution {
var maxDepth = 0
func maxDepth(_ root: TreeNode?) -> Int {
dfs(root, 1)
return maxDepth
}
func dfs(_ root:TreeNode?,_ level:Int) {
guard let root = root else {
return
}
if root.left == nil && root.right == nil {
maxDepth = max(maxDepth, level)
}
dfs(root.left, level+1)
dfs(root.right, level+1)
}
}
四、总结:
二叉树一般还有递归解法和迭代法,下次用别的方法解下。
范文参考:
ACM 选手图解 LeetCode 二叉树的最大深度(递归 + 非递归)| 编程文青李狗蛋 - 二叉树的最大深度 - 力扣(LeetCode)
二叉树的最大深度(易懂视频,带字幕) - 二叉树的最大深度 - 力扣(LeetCode) (leetcode-cn.com)
典型的回溯思想,操作完,退回,计算并保留每个路径的最大深度,最后返回即可 - 二叉树的最大深度 - 力扣(LeetCode)