我試圖理解為什么代碼回傳一個空串列。我不是在尋找問題的解決方案。解決方案已經存在于我的 Preorder 遍歷出了什么問題?
我想了解,我目前對遞回和使用全域變數的呼叫堆疊的理解有什么不正確。
class Solution {
ArrayList<Integer> list;
public List<Integer> preorderTraversal(TreeNode root) {
list = new ArrayList<Integer>();
preOrder(root);
return list;
}
public void preOrder(TreeNode node){
System.out.println(list.toString());
if(node == null)
return;
list.add(node.val);
//System.out.println(list.toString());
preorderTraversal(node.left);
preorderTraversal(node.right);
}
}
對于以下樹: [1,null,2,3]
我注意到在第一次列印呼叫中我得到 7 個空串列
[]
[]
[]
[]
[]
[]
[]
在我的第二個列印電話中,我得到以下資訊
[1]
[2]
[3]
為什么我的全域變數串列沒有“保存”或“附加”到下一個呼叫堆疊?似乎有多個串列物件正在被使用。
uj5u.com熱心網友回復:
因為你使用preorderTraversal左右節點所以每次它都會用一個新的空串列覆寫串列值,你應該像這樣使用 preOrder 和左右節點
public void preOrder(TreeNode node){
if(node == null)
return;
list.add(node.val);
preOrder(node.left);
preOrder(node.right);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/359903.html
下一篇:從api遞回獲取所有頁面
