题目:输入一颗二叉树的根节点root和一个整数expectNumber,找出二叉树中结点值的和为expectNumber的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。
如二叉树root为{10,5,12,4,7},expectNumber为22
解法:这里要注意的是路径必须是得到叶子节点的。
我们用先序遍历,一直遍历到叶子节点且当target为0时满足条件,这时是的节点顺序就是符合条件的,这里要重新创建ArrayList对象,划分新的内存空间,因为结尾处要remove最后一个节点。
import java.util.*;
public class Solution {
private ArrayList<ArrayList<Integer>> result = new ArrayList<>();
public ArrayList<ArrayList<Integer>> FindPath(TreeNode root,int expectNumber) {
getPath(root,expectNumber,new ArrayList<Integer>());
return result;
}
private void getPath(TreeNode root,int target,ArrayList<Integer> list){
if(root == null)
return;
target -= root.val;
list.add(root.val);
if(target == 0 && root.left == null && root.right == null){
result.add(new ArrayList<Integer>(list));
}else{
getPath(root.left,target,list);
getPath(root.right,target,list);
}
list.remove(list.size() - 1);
}
}