下面的代碼適用于中序遍歷-
class Solution {
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> res = new ArrayList<>();
solve(res,root);
return res;
}
private void solve(List<Integer> res, TreeNode root){
if(root == null) return;
solve(res, root.left);
res.add(root.val);
solve(res, root.right);
}
}
但是為什么我們要把求解寫成一個不同的函式呢?為什么我們不能只撰寫一個函式,例如:-
class Solution {
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> list= new ArrayList<>();
if(root==null)
{
return list;
}
inorderTraversal(list,root.left);
list.add(root.val);
inorderTraversal(list,root.right);
return list;
}
}
上面的代碼不起作用。為什么呢?請忽略任何拼寫錯誤/語法錯誤。
uj5u.com熱心網友回復:
您的替代方案可能有效,但存在一些問題:
- 該函式接受一個引數,但您使用兩個引數遞回呼叫它
- 該函式回傳一個串列,但在進行遞回呼叫時忽略該回傳的串列
以下是它的作業原理:
class Solution {
public List<Integer> inorderTraversal(TreeNode root) {
if(root==null)
{
return new ArrayList<Integer>();
}
List<Integer> list = inorderTraversal(root.left);
list.add(root.val);
list.addAll(inorderTraversal(root.right));
return list;
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/513457.html
標籤:递归树为了
