题目:
113. 路径总和 II
面试题34. 二叉树中和为某一值的路径
题解:回溯法
- 解释一:
- 解释二:
代码:回溯法
/**
* code113
*/
import java.util.*;
public class code113 {
public static List<List<Integer>> pathSum(TreeNode root, int sum)
{
List<List<Integer>> res = new ArrayList<List<Integer>>();
if(root == null)
{
return res;
}
List<Integer> list = new ArrayList<Integer>();
list.add(root.val);
dfs(res, list, root, sum, root.val);
return res;
}
public static void dfs(List<List<Integer>> res, List<Integer> list, TreeNode root, int sum, int count)
{
if(root.left == null && root.right == null)
{
if(count == sum)
{
List<Integer> temp = new ArrayList<>(list); // 创建一个 list 的副本
res.add(temp);
}
}
if(root.left != null)
{
list.add(root.left.val);
dfs(res, list, root.left, sum, count + root.left.val);
list.remove(list.size() - 1);
}
if(root.right != null)
{
list.add(root.right.val);
dfs(res, list, root.right, sum, count + root.right.val);
list.remove(list.size() - 1);
}
}
public static void main(String[] args) {
Integer nums[] = { 5, 4, 8, 11, null, 13, 4, 7, 2, null, null, 5, 1 };
TreeNode tree = ConstructTree.constructTree(nums);
System.out.println("***************************************");
TreeOperation.show(tree);
System.out.println("***************************************");
int sum = 22;
List<List<Integer>> ans = pathSum(tree, sum);
System.out.println(ans.toString());
System.out.println("***************************************");
}
}