【问题标题】:Minimum depth of binary tree : BFS , Javascript (leetcode 111)二叉树的最小深度:BFS,Javascript(leetcode 111)
【发布时间】:2021-09-19 12:47:13
【问题描述】:

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

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, null, 15, 7]

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

没有 var - 1

【问题讨论】:

    标签: javascript data-structures binary-tree breadth-first-search


    【解决方案1】:

    这是因为队列的长度是动态的并且不断变化。让我们以您的问题为例。首先,您将在这里添加 3 到队列中会发生什么:-

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

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

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

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

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

    作为queue.length &lt; i,循环会中断,深度会增加,但在我们将所有孩子添加到队列后深度应该会增加,这就是它给出错误答案的原因。所以你应该将queue.length 添加到var,这样我们想要做的迭代次数就不会改变。

    【讨论】:

      猜你喜欢
      • 2014-08-07
      • 2021-07-30
      • 2016-01-24
      • 2015-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-25
      相关资源
      最近更新 更多