使用 ++ 和 +1 作为参数的区别
Difference between using ++ and +1 as argument
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 作为遍历函数的第二个参数。第二个例子将 1 分配给 level (level = level + 1
) 和 feed level(即 1) 作为遍历函数的第二个参数。
让我们假设 level = 5;
level + 1
是 returns 值 6
的表达式,根本不改变 level
的值,所以它的值仍然是 5
.
++level
是一个表达式,它将 level
的值递增到 6
,然后 returns level
的值现在是 6
.
连续两次,就像在您的函数中一样:
level + 1; // returns 6
level + 1; // returns 6
现在反过来:
++level; // returns 6
++level; // returns 7
这就是它失败的原因。
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 作为遍历函数的第二个参数。第二个例子将 1 分配给 level (level = level + 1
) 和 feed level(即 1) 作为遍历函数的第二个参数。
让我们假设 level = 5;
level + 1
是 returns 值 6
的表达式,根本不改变 level
的值,所以它的值仍然是 5
.
++level
是一个表达式,它将 level
的值递增到 6
,然后 returns level
的值现在是 6
.
连续两次,就像在您的函数中一样:
level + 1; // returns 6
level + 1; // returns 6
现在反过来:
++level; // returns 6
++level; // returns 7
这就是它失败的原因。