微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

二叉树的最小深度 : BFS , Javascript (leetcode 111)

如何解决二叉树的最小深度 : BFS , Javascript (leetcode 111)

我偶然发现了一个解决方案,

var minDepth = function(root) {
if(!root) return 0;
let depth = 1;
let queue = [root];
if(!root.left && !root.right) return depth;

while(queue.length > 0 ){
  let queueLength = queue.length;

  for(let i = 0; i < queueLength; i++){
    let node = queue.shift();

    if(!node.left && !node.right) return depth;
    else{
      if(node.left) queue.push(node.left);
      if(node.right) queue.push(node.right);
    }
  }

  depth++;
}

return depth;
};

代码给出了错误的答案,而没有将队列长度分配给变量。

let queueLength = queue.length;

  for(let i = 0; i < queueLength; i++) ...

这里发生了什么?

示例: 输入 - [3,9,20,null,15,7]

输出: 使用变量 - 2(右)

没有 var - 1

解决方法

这是因为队列的长度是动态的并且不断变化。让我们举一个例子来说明你的问题。首先,您将在此处添加 3 到队列中会发生什么:-

第一次迭代前queue = [3],queue.length = 1 and i = 0

深度应该在第一次迭代后增加,但看看会发生什么。

在循环 queue = [9,20],queue.length = 2 and i = 1 的第一次迭代之后

在这里它应该停止,因为它已经检查了同一级别的所有值(在这种情况下是根节点,它是 3)但它继续作为 queue.length > i

在循环 queue = [20],queue.length = 1 and i = 2 的第二次迭代之后

作为queue.length < i,循环会中断并且深度会增加,但是在我们将所有孩子添加到队列后深度应该会增加,这就是为什么它给出错误答案的原因。因此,您应该将 queue.length 添加到 var,以便我们想要执行的迭代次数不会改变。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。