LeetCode Java刷题笔记—113. 路径总和 II

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();
}
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘Java

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值