b**m 发帖数: 1466 | 1 我的理解就是个DFS, 我写的有啥问题吗?
/**
* Definition for binary tree
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public ArrayList> pathSum(TreeNode root, int sum) {
// Start typing your Java solution below
// DO NOT write main() function
ArrayList> results = new ArrayList();
if(root==null){
return results;
}
ArrayList path = new ArrayList();
dfs(results,path,root,sum);
return results;
}
private void dfs(List results, List path, TreeNode node, int sum){
if(node.left ==null && node.right == null){
if( sum == node.val ){
ArrayList result = new ArrayList(path.size()+1);
result.addAll(path);
result.add(node);
results.add(result);
}
return;
}
path.add(node);
sum -= node.val;
if(node.left!=null){
dfs(results,path,node.left, sum);
}
if(node.right!=null){
dfs(results,path,node.right, sum);
}
path.remove(path.size()-1);
}
} | h****g 发帖数: 105 | 2 递归做完左右子数之后应该popback一下吧?Java里容器默认是引用调用? | h****g 发帖数: 308 | 3 到leaf 的时候也要path.remove(path.size()-1);吧 | b**m 发帖数: 1466 | 4 我觉得到leaf 不需要因为本来也没把leaf节点加进path里。
【在 h****g 的大作中提到】 : 到leaf 的时候也要path.remove(path.size()-1);吧
|
|