前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LeetCode103|路径总和II

LeetCode103|路径总和II

作者头像
码农王同学
发布2020-10-27 18:11:56
3090
发布2020-10-27 18:11:56
举报
文章被收录于专栏:后端Coder

0x01, 问题简述

给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。

说明: 叶子节点是指没有子节点的节点。

0x02,示例

代码语言:javascript
复制
示例:
给定如下二叉树,以及目标和 sum = 22,

              5
             / \
            4   8
           /   / \
          11  13  4
         /  \    / \
        7    2  5   1
返回:

[
   [5,4,11,2],
   [5,8,4,5]
]

0x03,题解思路

找到所有路径,进行解决

0x04,题解程序

代码语言:javascript
复制

import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class PathSumTest {
    public static void main(String[] args) {
        TreeNode t1 = new TreeNode(5);
        TreeNode t2 = new TreeNode(4);
        TreeNode t3 = new TreeNode(8);
        TreeNode t4 = new TreeNode(11);
        TreeNode t5 = new TreeNode(13);
        TreeNode t6 = new TreeNode(4);
        TreeNode t7 = new TreeNode(7);
        TreeNode t8 = new TreeNode(2);
        TreeNode t9 = new TreeNode(5);
        TreeNode t10 = new TreeNode(1);
        t1.left = t2;
        t1.right = t3;
        t2.left = t4;
        t3.left = t5;
        t3.right = t6;
        t4.left = t7;
        t4.right = t8;
        t6.left = t9;
        t6.right = t10;
        int sum = 22;
        List<List<Integer>> listList = pathSum(t1, sum);
        System.out.println("listList = " + listList);


    }

    public static List<List<Integer>> pathSum(TreeNode root, int sum) {
        List<List<Integer>> listList = new ArrayList<>();
        if (root == null) {
            return listList;
        }
        List<String> paths = new ArrayList<>();

        LinkedList<TreeNode> deque = new LinkedList<>();
        LinkedList<String> path_back = new LinkedList<>();
        deque.add(root);
        path_back.add(Integer.toString(root.val));
        TreeNode treeNode;
        String path;
        while (!deque.isEmpty()) {
            treeNode = deque.pollLast();
            path = path_back.pollLast();
            if (treeNode.left == null && treeNode.right == null) {
                paths.add(path);
            }
            if (treeNode.left != null) {
                deque.add(treeNode.left);
                path_back.add(path + "," + treeNode.left.val);
            }
            if (treeNode.right != null) {
                deque.add(treeNode.right);
                path_back.add(path + "," + treeNode.right.val);
            }
        }
        paths.stream().map(str -> str.split(",")).forEachOrdered(split -> {
            if (Stream.of(split).filter(Objects::nonNull).
                    filter(x -> !"".equals(x)).mapToInt(Integer::parseInt).sum() == sum) {
                List<Integer> list = new ArrayList<>();
                for (String s : split) {
                    list.add(Integer.parseInt(s));
                }
                listList.addAll(Collections.singleton(list));
            }
        });
        return listList;
    }
}

0x05 ,题解程序图片版

0x06,总结

我的文章基本上都很少再内容上去过多强调重要性了,你觉得重要它就重要,相比于以往的文章去给与读者或者自己去强调有多么重要,后面单独想想其实没有吧必要去这样说,于己于他都没有意义,主动感觉他重要,去做就可以了,这是自己的一点内容。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-10-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码农王同学 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档