import java.util.ArrayList;
/**
* 面试题34:二叉树中和为某一值的路径
* 输入一颗二叉树的根节点和一个整数,按字典序打印出二叉树中结点值的和为输入整数的所有路径。
* 路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。
* 输入:{10,5,12,4,7},22
* 输出:[[10,5,7],[10,12]]
* @author
* @create 2021-03-28 20:41
*/
public class Solution34 {
private static ArrayList<ArrayList<Integer>> result = new ArrayList<>();
private static ArrayList<Integer> list = new ArrayList<>();
public static void main(String[] args) {
TreeNode root = new TreeNode(10);
TreeNode p2 = new TreeNode(5);
TreeNode p3 = new TreeNode(12);
TreeNode p4 = new TreeNode(4);
TreeNode p5 = new TreeNode(7);
root.left = p2;
root.right = p3;
p2.left = p4;
p2.right = p5;
ArrayList<ArrayList<Integer>> res = findPath(root,22);
System.out.println(res);
}
public static ArrayList<ArrayList<Integer>> findPath(TreeNode root, int target) {
if (root == null){
return result;
}
list.add(root.val);//添加根节点
target -= root.val;
if (target == 0 && root.left == null && root.right == null){
//如果找到对应节点就将当前的list新建ArrayList对象添加到result中
result.add(new ArrayList<Integer>(list));
}
findPath(root.left,target);
findPath(root.right,target);
list.remove(list.size() - 1);//删除最后一个节点往上寻找,回溯
return result;
}
}
02-27
216