給定一棵二叉樹和一個和,判斷從樹的根結點到葉子結點的全部結點的和是否等於給定的和,若是等於就記錄這條路徑。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); // 刪除最後一個 } } }