题目描述
Given a binary tree and a sum, find all root-to-leaf paths where each path's sum equals the given sum.
For example:Given the below binary tree and
sum
= 22
,
5 / \ 4 8 / / \ 11 13 4 / \ / \ 7 2 5 1
return
[ [5,4,11,2], [5,8,4,5] ]给出二叉树中路径值等于给定数的所有路径。
解题思路
按以下步骤进行:
- root == null,则返回空list;
- root是叶子节点,如果root.val == sum,返回添加有root的list,否则返回空list;
- 如果root不是叶子节点 && root.left!=null,得到leftList = pathSum(root.left, sum - root.val),遍历leftList,进行操作add(0, root.val),遍历完成后将leftList赋值给list;
- 如果root不是叶子节点 && root.right!=null,得到rightList = pathSum(root.right, sum - root.val),遍历rightList,进行操作add(0, root.val),同时在每次循环中list进行add新的rightList元素的操作;
- 返回list。
代码
public static ArrayList<ArrayList<Integer>> pathSum(TreeNode root, int sum) {
ArrayList<ArrayList<Integer>> allList = new ArrayList<ArrayList<Integer>>();
ArrayList<Integer> list = new ArrayList<Integer>();
if (root == null) {
return allList;
}
if (root.left == null && root.right == null) {
if (root.val == sum) {
list.add(root.val);
allList.add(list);
}
return allList;
}
if (root.left != null) {
ArrayList<ArrayList<Integer>> leftList = pathSum(root.left, sum - root.val);
if (leftList!=null && leftList.size()>0) {
for(ArrayList<Integer> child:leftList){
child.add(0, root.val);
}
allList = leftList;
}
}
if(root.right != null){
ArrayList<ArrayList<Integer>> rightList = pathSum(root.right, sum - root.val);
if (rightList!=null && rightList.size()>0) {
for(ArrayList<Integer> child:rightList){
child.add(0, root.val);
allList.add(child);
}
}
}
return allList;
}