[路飞]_leetcode-111-二叉树的最小深度

769 阅读2分钟

「这是我参与2022首次更文挑战的第38天,活动详情查看:2022首次更文挑战

[题目地址]

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

最小深度是从根节点到最近叶子节点的最短路径上的节点数量。

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

示例 1:

输入: root = [3,9,20,null,null,15,7]
输出: 2

示例 2:

输入: root = [2,null,3,null,4,null,5,null,6]
输出: 5

提示:

  • 树中节点数的范围在 [0, 105] 内
  • -1000 <= Node.val <= 1000

解题思路

本题要求我们找到最小深度,题目给出的关于最小深度的解释是从根节点到最近叶子节点的最短路径上的节点数量。
其实简单理解,就是最浅的叶子节点的深度,什么是最浅的叶子节点,就是距离根节点最近并且没有子节点的节点,对应示例1中就是值为 9 的节点。
那这样的问题如何求解呢?
很简单,我们首先初始化结果值为一个极大的值,然后扫描整棵二叉树,扫描的过程中传入深度,如果当前节点为叶子节点,则尝试用它的深度更新结果值,最后结果值中保存的就是所有叶子节点的深度中最小的值,也就是本题要求的最小深度。

代码实现

var minDepth = function(root) {
  // 如果二叉树为空,返回 0
  if(root===null) return 0;
  // 因为二叉树中节点数量最多为100000,所以我们初始化结果值为100000
  let res = 100000;
  // 前序遍历二叉树
  function preorder(node,d){
    // 如果当前节点为叶子节点
    if(node.left===null&&node.right===null){
      // 尝试用它的深度更新结果值
      res = Math.min(res,d)
      return
    }
    // 否则递归处理左右子树
    if(node.left) preorder(node.left,d+1)
    if(node.right) preorder(node.right,d+1)
  }
  // 前序遍历二叉树,并传入根节点和初始深度1
  preorder(root,1)
  // 返回结果值
  return res;
};

至此我们就完成了 leetcode-111-二叉树的最小深度

如有任何问题或建议,欢迎留言讨论!👏🏻👏🏻👏🏻