亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

遞歸調用中的預增量

遞歸調用中的預增量

陪伴而非守候 2021-10-13 16:04:24
我正在解決這個 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);代碼失敗,為什么會發生這種情況?兩個版本不應該是等價的嗎?
查看完整描述

1 回答

?
飲歌長嘯

TA貢獻1951條經驗 獲得超3個贊

讓我們說 currDepth = 0


在您的第一個版本中,兩個遞歸調用將如下所示:


traverse(root.right, ans, 1);

traverse(root.left, ans, 1);

這是正確的,因為您希望兩個遞歸調用都進入下一個級別。


在您的第二個版本中,它看起來像這樣:


traverse(root.right, ans, 1);

traverse(root.left, ans, 2);

這意味著第一個遞歸調用工作正常,但第二個是錯誤的(跳過一個級別)。


為什么?你改變了你的currDepth參數。您的代碼的第一個版本不會更改它。它傳遞currDepth + 1到下一個級別。


查看完整回答
反對 回復 2021-10-13
  • 1 回答
  • 0 關注
  • 149 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號