使用++和+1作为参数的区别

时间:2018-07-24 02:00:40

标签: javascript algorithm binary-tree

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)。

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

这就是失败的原因。