给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。
说明: 叶子节点是指没有子节点的节点。
示例:
给定如下二叉树,以及目标和 sum = 22
返回:
递归回溯(java)
class Solution {
public List<List<Integer>> pathSum(TreeNode root, int targetSum) {
List<List<Integer>> res = new ArrayList<>();
traversal(root, targetSum, new ArrayList<Integer>(), res);
return res;
}
public void traversal(TreeNode node, int sum, List<Integer> list, List<List<Integer>> res) {
if (node == null) {
return;
}
list.add(node.val);
// 如果是叶子结点
if (node.left == null && node.right == null) {
// 如果sum等于节点值,说明这条路径正好满足题意
if (sum == node.val) {
// 添加到结果集合中,注意这里一定要新创建一个list
res.add(new ArrayList<>(list));
}
// 回溯
list.remove(list.size()-1);
return;
}
// 如果节点不是叶子结点,递归左右叶子结点
traversal(node.left, sum-node.val, list, res);
traversal(node.right, sum-node.val, list, res);
// 回溯
list.remove(list.size()-1);
}
}