【发布时间】:2019-03-02 20:18:32
【问题描述】:
我正在解决这个 leetcode 问题 https://leetcode.com/problems/binary-tree-right-side-view/description/。
以下代码可以正常工作。
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);
}
}
但是,在最后 2 次递归调用中,如果我将这些行更改为
traverse(root.right, ans, ++currDepth);
traverse(root.left, ans, ++currDepth);
代码失败,为什么会这样?两个版本不应该是等价的吗?
【问题讨论】:
-
你认为
++currDepth会做什么? -
在递归调用完成之前将 currDepth 的给定值增加一?与 currDepth++ 相反,它会在之后增加它
-
太棒了。现在
currDepth在第二次调用traverse时用作参数,如果第一次将其增加一,那么它的值是多少? -
嗯,2,对吧?它从 0 开始,第一次调用将其增加到 1,因此在第二次调用期间它应该是 2
-
对。当您使用
currDept + 1时,您是否期望同样的事情发生?
标签: java recursion pre-increment