var count = function(tree) {
var stack = [];
var count = 0;
for (var node = tree; node; count++, node = stack.pop()) {
if (node.left) stack.push(node.left);
if (node.right) stack.push(node.right);
}
return count;
};
上述代码工作并返回二叉树内节点的数量。不确定此片段的工作方式
我很困惑这是如何工作的。 var stack = [];
不会创建一个空数组吗?
如果是这样,在for循环中设置节点时不会变为0,从而使两个if语句返回false并且不会运行?
编辑:我刚刚意识到代码node = stack.pop()
将不会执行,直到循环体的结束。因此,节点直到该点将包含传递给过程的当前节点(从头节点开始)。
道歉世俗的问题,它的时间睡觉,我认为
我提供意见,并创建了一个 JS Fiddle
嗯,重写它确实比评论和执行更聪明;尽管它并没有提高对for循环的理解。 :d –