使用 ++ 和 +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

这就是它失败的原因。