//这里有一个巧妙之处,有点类似深度优先搜索,也有点类似前序遍历,同时每次都是把expectNumber与节点值相减,在遍历时,每次都把节点加入路径中,直到搜索到叶子节点,再判断expectNumber是否减为0了,如果是则加入总路径arrAll 最后都要从arr路径中移除最后一个值,这样就可以回溯到父子节点。
import java.util.ArrayList;
class TreeNode {
int val = 0; TreeNode left = null; TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
public class Solution {
ArrayList<ArrayList> arrAll=new ArrayList<ArrayList>();
ArrayList arr=new ArrayList();
public ArrayList<ArrayList> FindPath(TreeNode root,int expectNumber) {
if(root==null) return arrAll;
arr.add(root.val);
expectNumber-=root.val;
if(root.left!=null) FindPath(root.left,expectNumber);
if(root.right!=null) FindPath(root.right,expectNumber);
if(root.left==null&&root.right==null&&expectNumber==0)
{
arrAll.add(new ArrayList<Integer>(arr));
}
arr.remove(arr.size()-1);
return arrAll;
}
}