给定一棵二叉树和一个和,判断从树的根结点到叶子结点的全部结点的和是否等于给定的和,若是等于就记录这条路径。java
对树进行遍历,而且使用回溯法进行求解。算法
树结点类this
public class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; } }
算法实现类spa
import java.util.ArrayList; import java.util.LinkedList; import java.util.List; public class Solution { private List<List<Integer>> result; private List<Integer> l; private int sum; private int curSum = 0; public List<List<Integer>> pathSum(TreeNode root, int sum) { result = new LinkedList<>(); if (root != null) { this.sum = sum; l = new LinkedList<>(); pathSum(root); } return result; } private void pathSum(TreeNode root) { if (root != null) { l.add(root.val); curSum += root.val; if (root.left == null && root.right == null && curSum == sum) { List<Integer> list = new LinkedList<>(); for (Integer i : l) { list.add(i); } result.add(list); } if (root.left != null) { pathSum(root.left); } if (root.right != null) { pathSum(root.right); } curSum -= root.val; l.remove(l.size() - 1); // 删除最后一个 } } }