4.leetCode剑指offer第34题
- 题目如下:
输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶节点所经过的节点形成一条路径。
给定如下一棵树和值22:
5 / \ 4 8 / / \ 11 13 4 / \ / \ 7 2 5 1
会返回这样一个集合[[5,4,11,2], [5,8,4,5]]。
这道题需要用回溯算法来解决问题,因为这是第一次做有关回溯的题,所以想不到该如何来“读档”,还是看了答案才找到解题思路。
LinkedList集合有一个removeLast的方法来山区链表中最后添加的数据,可以使用这个方法来一步步倒档。
- 代码如下:
public class Solution {
List<List<Integer>> lists =new LinkedList<>();
LinkedList<Integer> list =new LinkedList<>();
public List<List<Integer>> pathSum(TreeNode root, int sum) {
dfs(root,sum);
return lists;
}
public void dfs(TreeNode root ,int sum ){
if (root==null) return;
int val = root.val;
list.add(val);
if (sum-val==0&&root.left==null&&root.right==null){
lists.add(new LinkedList<>(list));
}
dfs(root.left,sum-val);
dfs(root.right,sum-val);
list.removeLast();
}
}