zoukankan      html  css  js  c++  java
  • Lc113_路径总和 II

    package com.example.demo;
    
    import java.util.ArrayList;
    import java.util.LinkedList;
    import java.util.List;
    
    /**
     * 113. 路径总和 II
     * 给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。
     * <p>
     * 说明: 叶子节点是指没有子节点的节点。
     * <p>
     * 示例:
     * 给定如下二叉树,以及目标和 sum = 22,
     * <p>
     * 5
     * / 
     * 4   8
     * /   / 
     * 11  13  4
     * /      / 
     * 7    2  5   1
     * 返回:
     * <p>
     * [
     * [5,4,11,2],
     * [5,8,4,5]
     * ]
     */
    public class Lc113 {
    
          //将路径记录成字符串,在进行格式转换,可以考虑深拷贝
        public static List<List<Integer>> pathSum(TreeNode root, int sum) {
            LinkedList<String> linkedList = new LinkedList<>();
            calc(root, 0, "", linkedList, sum);
            linkedList.forEach(n->{
                System.out.println(n);
            });
            List<List<Integer>> lists = new ArrayList<>();
            linkedList.forEach(n->{
                String[] temp = n.split(",");
                List<Integer> temps =new ArrayList<>();
                for (int i = 0; i < temp.length; i++) {
                    temps.add(Integer.valueOf(temp[i]));
                }
                lists.add(temps);
            });
    
            return lists;
        }
    
        public static void calc(TreeNode root, int res, String path, LinkedList<String> paths, int sum) {
            if (root != null) {
                path += root.val;
                res += root.val;
                if (root.left == null && root.right == null && res == sum) {
    //                System.out.println(path);
    //                System.out.println(res);
                    paths.add(path);
                } else {
                    path += ",";
                    calc(root.left, res, path, paths, sum);
                    calc(root.right, res, path, paths, sum);
                }
            }
        }
    
        public static void main(String[] args) {
    
            Integer[] arr = new Integer[]{1, 2, 3, 4, 5, 6, 7};
            TreeNode root = CreateNode.createTree(arr).get(0);
            pathSum(root, 7).forEach(n->{
               n.forEach(m->{
                   System.out.println(m);
               });
            });
        }
    
    }
    
    
  • 相关阅读:
    jQuery1.3.2 源码学习 2 两个重要的正则表达式
    学习 jQuery 4 使用方法选择
    学习 jQuery 6 在 TreeView 中实现全选
    jQuery1.3.2 源码学习4 init 函数分析 2
    学习 jQuery 3 选择器
    学习 jQuery 5 筛选和过滤器
    条款9:在删除选项中仔细选择
    优化3D图形流水线
    指针相减
    浅谈水体的实现
  • 原文地址:https://www.cnblogs.com/xiaoshahai/p/13140545.html
Copyright © 2011-2022 走看看