113. 路径总和 II--🀄️


113. 路径总和 II

难度中等 435
给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。
叶子节点 是指没有子节点的节点。

示例 1:

输入:root = [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSum = 22
输出:[[5,4,11,2],[5,8,4,5]]

示例 2:

输入:root = [1,2,3], targetSum = 5
输出:[]

示例 3:
输入:root = [1,2], targetSum = 0
输出:[]

    List<List<Integer>> ret = new LinkedList<List<Integer>>();
    Deque<Integer> path = new LinkedList<Integer>();

    public List<List<Integer>> pathSum(TreeNode root, int sum) &#123;
        dfs(root, sum);
        return ret;
    &#125;

    public void dfs(TreeNode root, int sum) &#123;
        if (root == null) &#123;
            return;
        &#125;
        path.offerLast(root.val);
        sum -= root.val;
        if (root.left == null && root.right == null && sum == 0) &#123;
            ret.add(new LinkedList<Integer>(path));
        &#125;
        dfs(root.left, sum);
        dfs(root.right, sum);
        path.pollLast();//不满足的路径弹出.满足的不会执行到这里(子节点为空时就返回return了)。
    &#125;

解析

深度优先搜索
思路及算法
我们可以采用深度优先搜索的方式,枚举每一条从根节点到叶子节点的路径。当我们遍历到叶子节点,且此时路径和恰为目标和时,我们就找到了一条满足条件的路径。


文章作者:   future
版权声明:   本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 future !
 上一篇
剑指 Offer 32 - III. 从上到下打印二叉树 III--🀄️ 剑指 Offer 32 - III. 从上到下打印二叉树 III--🀄️
剑指 Offer 32 - III. 从上到下打印二叉树 III难度中等 76请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。 例如:给定
下一篇 
530. 二叉搜索树的最小绝对差 530. 二叉搜索树的最小绝对差
530. 二叉搜索树的最小绝对差难度简单 233给你一棵所有节点为非负值的二叉搜索树,请你计算树中任意两节点的差的绝对值的最小值。 示例:输入: 1         3    /   2 输出:1 解释:最小绝对差为 1,其中 2 和 1
  目录