這是一個leetcode問題。 「給定一棵二叉樹和一個和,找到每個路徑的總和等於給定總和的所有根到葉路徑。」但是由於時間超出限制,我的代碼無法通過測試用例。但解決方案代碼(https://oj.leetcode.com/discuss/15169/14-line-solution-in-java-using-recursion)可以通過測試用例。我不知道有兩個版本代碼有什麼大的區別嗎?二叉樹遍歷的時間效率
我的代碼:
public class Solution {
List<List<Integer>> res = new ArrayList<List<Integer>>();
public List<List<Integer>> pathSum(TreeNode root, int sum) {
if (root == null)
return res;
List<Integer> t = new ArrayList<Integer>();
has(root, sum, t);
return res;
}
public void has(TreeNode root, int sum, List<Integer> t) {
if (root == null)
return;
if (root.left == null && root.right == null && sum == root.val) {
t.add(root.val);
res.add(t);
return;
}
t.add(root.val);
has(root.right, sum - root.val, t);
has(root.left, sum - root.val, t);
return;
}
}
解決方案:
public class Solution {
public static List<List<Integer>> pathSum(TreeNode root, int sum) {
List<List<Integer>> list = new ArrayList<List<Integer>>();
if(root==null) return list;
if (root.val==sum && root.left==null && root.right==null) {
list.add(new ArrayList<Integer>());
list.get(list.size()-1).add(root.val);
return list;
}
list.addAll(pathSum(root.left, sum-root.val));
list.addAll(pathSum(root.right, sum-root.val));
for(List<Integer> l:list)
l.add(0, root.val);
return list;
}
}
當我的代碼碰到葉子時,我將把結果保存到一個全局變量'res'中。我認爲我的代碼適合邏輯。 – 2014-11-09 04:16:42
不,這不是真的,你沒有在res中存儲任何東西。你的想法是正確的,但你實施它是錯誤的。 – Auberon 2014-11-09 04:22:51
等等,我再次快速瀏覽一下你的代碼,你是對的。堅持讓我找出你的錯誤。 – Auberon 2014-11-09 04:24:25