题目描述

输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)

https://www.nowcoder.com/practice/b736e784e3e34731af99065031301bca

解题想法

深度优先搜索、递归回溯:先序遍历每一条路径,如果满足要求就加入到列表。

不满足就进行退栈操作,走其它路径。

代码实现

  1. import java.util.ArrayList;
  2. /**
  3. public class TreeNode {
  4. int val = 0;
  5. TreeNode left = null;
  6. TreeNode right = null;
  7. public TreeNode(int val) {
  8. this.val = val;
  9. }
  10. }
  11. */
  12. public class Solution {
  13. ArrayList<ArrayList<Integer>> listAll = new ArrayList<>();
  14. ArrayList<Integer> list = new ArrayList<>();
  15. public ArrayList<ArrayList<Integer>> FindPath(TreeNode root,int target) {
  16. if (root == null){
  17. return listAll;
  18. }
  19. list.add(root.val);
  20. target -= root.val;
  21. if (target == 0 && root.left == null && root.right == null){
  22. listAll.add(new ArrayList(list));
  23. }
  24. FindPath(root.left,target);
  25. FindPath(root.right,target);
  26. list.remove(list.size()-1);
  27. return listAll;
  28. }
  29. }