• Leetcode 113 路径总和 II


    题目定义:

    给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。
    
    说明: 叶子节点是指没有子节点的节点。
    
    示例:
    给定如下二叉树,以及目标和 sum = 22,
    
                  5
                 / 
                4   8
               /   / 
              11  13  4
             /      / 
            7    2  5   1
    返回:
    
    [
       [5,4,11,2],
       [5,8,4,5]
    ]
    
    

    方式一(回溯):

    class Solution {
        private List<List<Integer>> ans = new ArrayList<>();
        public List<List<Integer>> pathSum(TreeNode root, int sum) {
            if(root == null)
                return ans;
            dfs(new ArrayList<>(),root,sum);
            return ans;
        }
        private void dfs(List<Integer> list,TreeNode root,int remaining){
            if(root == null)
                return;
            list.add(root.val);
            if(root.left == null && root.right == null && remaining - root.val == 0){
                List<Integer> dest = new ArrayList<>();
                Collections.addAll(dest, new Integer[list.size()]);
                Collections.copy(dest,list);
                ans.add(dest);
                return;
            }
            dfs(list,root.left,remaining - root.val);
            dfs(list,root.right,remaining - root.val);
            list.remove(list.size() - 1);
        }
    }
    

    方式二(深度优先遍历):

    class Solution {
        List<List<Integer>> ans = new LinkedList<>();
        Deque<Integer> stack = new LinkedList<>();
        public List<List<Integer>> pathSum(TreeNode root, int targetSum) {
            dfs(root,targetSum);
            return ans;
        }
        private void dfs(TreeNode root,int targetSum){
            if(root == null)
                return;
            stack.offerLast(root.val);
            targetSum -= root.val;
            if(root.left == null && root.right == null && targetSum == 0){
                ans.add(new LinkedList<>(stack));
            }
            dfs(root.left,targetSum);
            dfs(root.right,targetSum);
            stack.pollLast();
        }
    }
    

    方式三(广度优先遍历):

    class Solution {
        List<List<Integer>> ans = new ArrayList<>();
        Map<TreeNode,TreeNode> cache = new HashMap<>();
        public List<List<Integer>> pathSum(TreeNode root, int targetSum) {
            if(root == null)
                return ans;
            
            Queue<TreeNode> queueNode = new ArrayDeque<>();
            Queue<Integer> queueParentSum = new ArrayDeque<>();
            queueNode.offer(root);
            queueParentSum.offer(0);
            while(!queueNode.isEmpty()){
                TreeNode node = queueNode.poll();
                int ret = node.val + queueParentSum.poll();
                if(node.left == null && node.right == null){
                    if(ret  == targetSum){
                        getPath(node);
                    }
                }else{
                    if(node.left != null){
                        cache.put(node.left,node);
                        queueNode.offer(node.left);
                        queueParentSum.offer(ret);
                    }
                    if(node.right != null){
                        cache.put(node.right,node);
                        queueNode.offer(node.right);
                        queueParentSum.offer(ret);
                    }
                }
            }
            return ans;
        }
    
        private void getPath(TreeNode node){
            List<Integer> temp = new ArrayList<>();
            while(node != null){
                temp.add(node.val);
                node = cache.get(node);
            }
            Collections.reverse(temp);
            ans.add(temp);
        }
    }
    

    参考:

    https://leetcode-cn.com/problems/path-sum-ii/solution/lu-jing-zong-he-ii-by-leetcode-solution/

  • 相关阅读:
    【九】纯配置版本的微服务
    Eclipse 项目导航字体设置 左侧树字体
    【八】Spring Cloud Config
    Lua Table 操作
    根据角度和距离生成游戏物体(以圆心向圆圈线上生成物体)
    Unity UI和引用的管理中心
    利用三角函数实现按钮上下漂浮
    DoTween学习笔记(二) UGUI结合使用(实现一些简单效果)
    DoTween学习笔记(一)
    人物角色群体攻击判定四(三角区域判断)
  • 原文地址:https://www.cnblogs.com/CodingXu-jie/p/14280619.html
Copyright © 2020-2023  润新知