算法-二叉树查找和为target的路径

1. 和为target的路径

有如下二叉树,需要找出从根节点到叶节点 和为指定值 的路径。

     0
    /  \
  1      2
 /        \
5           4

例如 target =6, 则需要返回 [0,1,5],[0,2,4]

2. 解法

回溯法查找,如有解直接返回,无解返回上一层。

ArrayList<Integer> list = new ArrayList<>(); // 记录一个解空间
ArrayList<ArrayList<Integer>> paths = new ArrayList<>(); // 记录所有符合条件的解空间

public ArrayList<ArrayList<Integer>> findPath(TreeNode root, int target) {
       if (root == null) return  paths;
       list.add(root);
       target -= root.val;
       if (target == 0 && root.left == null && root.right == null) {
            paths.add(new ArrayList<Integer>(list)); // 有解,将其加入路径列表
       }
       findPath(root.left, target);
       findPath(root.right, target);
       list.remove(list.size()-1); // 解空间返回上一层
       return paths;
}

你可能感兴趣的:(树,算法,回溯)