113. 路径总和 II
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/path-sum-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
这次不是判断有没有路径了,而是把这条路径找出来。
从上至下找,添加到集合中,不符合就回溯,把这个值给拿出来。
Stack<Integer> stack = new Stack<>();
List<List<Integer>> ret = new ArrayList<>();
public List<List<Integer>> pathSum(TreeNode root, int targetSum) {
dfs(root,targetSum);
return ret;
}
public void dfs(TreeNode node, int targetSum) {
// 节点只有一个孩子,遍历就会出现null
if(node == null) {
return;
}
// 找到了叶子节点
if(node.left == null && node.right == null) {
if(targetSum == node.val){
List<Integer> list = new ArrayList<>(stack);
// 此时stack还没有加入叶子节点,这一步加入。
list.add(node.val);
ret.add(list);
}
return;
}
stack.push(node.val);
dfs(node.left, targetSum-node.val);
dfs(node.right,targetSum-node.val);
stack.pop();
}