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

Posted 刘Java

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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();

以上是关于LeetCode Java刷题笔记—113. 路径总和 II的主要内容,如果未能解决你的问题,请参考以下文章

leetcode刷题分类笔记

Leetcode刷题Python113. 路径总和 II

LeetCode刷题笔记-数据结构-day16

LeetCode刷题笔记-数据结构-day16

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

LeetCode Java刷题笔记— 543. 二叉树的直径