var levelOrder = function(root) {
const arr = [];
function traverse(node, level) {
if (!node) return;
if(arr[level] === undefined) {
arr[level] = [];
arr[level].push(node.val)
} else {
arr[level].push(node.val)
}
traverse(node.left, level + 1);
traverse(node.right, level + 1);
}
traverse(root, 0);
return arr;
};
在递归中遍历函数。使用
traverse(node.left, level + 1);
给我正确答案,但是
traverse(node.left, ++level);
给我错误的答案。
比方说当前的级别为0。我的假设是,第一个示例将把1作为第二个参数传递给遍历函数。第二个示例将为级别(level = level + 1)分配1,并为横移功能的第二个参数指定给料级别(1)。
答案 0 :(得分:2)
让我们假设level = 5;
level + 1
是一个返回值6
且根本不更改level
值的表达式,因此其值仍为5
。
++level
是一个表达式,它将level
的值增加到6
,然后返回level
的值,现在为6
。
连续两次执行您的函数:
level + 1; // returns 6
level + 1; // returns 6
现在用另一种方式:
++level; // returns 6
++level; // returns 7
这就是失败的原因。