111. 二叉树的最小深度(2021-05-25)

本文介绍了如何使用广度优先搜索(BFS)和深度优先搜索(DFS)来解决二叉树的最小深度问题。BFS解法通过不断迭代直到找到叶子节点来确定最小深度,而DFS解法则需要考虑只有一侧子树的情况,但作者在实现DFS时遇到了困难。文章提供了两种解法的详细代码,并分析了它们的时间复杂度和空间复杂度。
摘要由CSDN通过智能技术生成

111. 二叉树的最小深度

链接:https://leetcode-cn.com/problems/minimum-depth-of-binary-tree/

题目描述见链接内容。

要熟悉叶子节点这个概念,叶子节点指的就是没有子节点的节点

解法1:广度优先搜索(BFS)

我这个脑袋,就不太适合去考虑递归的问题,DFS一碰就完蛋,就这么简单的递归,我也总是出错,总是差一点。所以先从BFS下手,和之前求二叉树最大深度的方法基本是一样的,只是在内层循环时添加了一个判断出它是叶子节点就跳出的步骤

var minDepth = function (root) {
  if (!root) {
    return 0;
  }
  const queue = [[root]];
  let result = 1;

  while (queue.length > 0) {
    const insideQueue = queue.shift();
    const temp = [];

    while (insideQueue.length > 0) {
      const current = insideQueue.shift();
      if (!current.left && !current.right) {
        return result;
      }
      if (current.left) {
        temp.push(current.left);
      }

      if (current.right) {
        temp.push(current.right);
      }
    }

    result += 1;
    queue.push(temp);
  }

  return result;
};
  • 时间复杂度:${O(N)}$
  • 空间复杂度:${O(N)}$
  • 执行用时:276ms, 在所有JavaScript提交中击败了86%的用户,内存消耗:70.8MB,在所有JavaScript提交中击败了99%的用户

解法2:深度优先搜索(DFS)

没写出来,耐心不够用了,少考虑了只有左子树或者只有右子树的情况,总是去比较Math.min(getDepth(node.left), getDepth(node.right))了,这样如果只有某一边的子树,就返回了错误的结果

var minDepth = function (root) {
  return getDepth(root);
};

function getDepth(node) {
  if (!node) {
    return 0;
  }

  if (!node.left) {
    return getDepth(node.right) + 1;
  }

  if (!node.right) {
    return getDepth(node.left) + 1;
  }

  return Math.min(getDepth(node.left), getDepth(node.right)) + 1;
}
  • 时间复杂度:${O(N)}$N是树的节点数
  • 空间复杂度:${O(H)}$H是树的高度,最坏情况为${O(N)}$,平均情况下树的高度与节点树的对数成正相关${O(log N)}$
  • 执行用时:292ms, 在所有JavaScript提交中击败了46%的用户,内存消耗:71.4MB,在所有JavaScript提交中击败了75%的用户
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值