LeetCode 104. 二叉树的最大深度

75 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第5天,点击查看活动详情

一、题目描述:

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

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

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

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

示例: 给定二叉树 [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)