LeetCode Java刷题笔记—113. 路径总和 II
Posted 刘Java
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode Java刷题笔记—113. 路径总和 II相关的知识,希望对你有一定的参考价值。
给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。
中等难度,这道题和剑指 Offer 34. 二叉树中和为某一值的路径是同一题。我们使用dfs前序遍历即可,然后使用一个辅助栈结构来临时存储路径元素,如果和等于某一值,那么将当前栈中的数据存入返回值集合中。最后记得要将当前值出栈,否则只入栈不出栈就出问题了。
ArrayList<List<Integer>> res = new ArrayList<>();
public List<List<Integer>> pathSum(TreeNode root, int targetSum)
//前序遍历,借用辅助栈
dfs(root, new LinkedList<>(), targetSum);
return res;
private void dfs(TreeNode root, LinkedList<Integer> list, int targetSum)
//节点为null的情况
if (root == null)
return;
//入栈
list.addLast(root.val);
//如果找到了一条满足条件的路径,那么还要看其是否有子节点
//如果没有子节点,那么才能返回,否则还要向下查找,因为节点值可能是0或者负数
if (root.left == null && root.right == null && root.val == targetSum)
//将路径集合存入结果集合,这里的是integer类型,所以是传递的值
res.add(new LinkedList<>(list));
else
//继续向下查找
//遍历左子节点,同时target减去当前值
dfs(root.left, list, targetSum - root.val);
dfs(root.right, list, targetSum - root.val);
//最终要将当前值出栈,否则只入栈不出栈就出问题了
list.removeLast();
以上是关于LeetCode Java刷题笔记—113. 路径总和 II的主要内容,如果未能解决你的问题,请参考以下文章