Java 递归调用中的预增量

Java 递归调用中的预增量,java,recursion,pre-increment,Java,Recursion,Pre Increment,我在解决这个leetcode问题 下面的代码工作正常 class Solution { public List<Integer> rightSideView(TreeNode root) { List <Integer> ans = new LinkedList<>(); if (root == null) return ans; traverse(root, ans, 0); retur

我在解决这个leetcode问题

下面的代码工作正常

class Solution {
    public List<Integer> rightSideView(TreeNode root) {
        List <Integer> ans = new LinkedList<>();
        if (root == null) return ans;
        traverse(root, ans, 0);
        return ans;
    }

    public void traverse(TreeNode root, List<Integer> ans, int currDepth){
        if (root == null) return;

        if (ans.size() == currDepth) ans.add(root.val);
        traverse(root.right, ans, currDepth + 1);
        traverse(root.left, ans, currDepth + 1);
    }
}

代码失败了,为什么会发生这种情况?这两个版本不应该是等价的吗?

让我们说currDepth=0

在第一个版本中,两个递归调用如下所示:

traverse(root.right, ans, 1);
traverse(root.left, ans, 1);
traverse(root.right, ans, 1);
traverse(root.left, ans, 2);
这是正确的,因为您希望两个递归调用都转到下一个级别

在第二个版本中,它如下所示:

traverse(root.right, ans, 1);
traverse(root.left, ans, 1);
traverse(root.right, ans, 1);
traverse(root.left, ans, 2);
这意味着第一个递归调用工作正常,但第二个调用错误(跳过一级)


为什么??您更改了
currendepth
参数。代码的第一个版本不会改变它。它将
currDepth+1
传递到下一级

您认为
++currDepth
有什么作用?在递归调用完成之前,将currDepth的给定值增加1?与curredepth++相反,curredepth++会从后面增加它。现在,如果第一次调用将
currDepth
的值增加1,那么
currDepth
在第二次调用中用作参数时的值是多少?好的,2,对吗?它以0开始,第一次调用将其增加到1,因此在第二次调用期间,它应该是2对。当您使用
currDept+1
时,您是否预期会发生同样的情况?谢谢,我现在知道出了什么问题,我忘记了使用++currDepth会更改下一行的值。