zoukankan      html  css  js  c++  java
  • LeetCode:路径总和II【113】

    LeetCode:路径总和II【113】

    题目描述

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

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

    示例:
    给定如下二叉树,以及目标和 sum = 22

                  5
                 / 
                4   8
               /   / 
              11  13  4
             /      / 
            7    2  5   1
    

    返回:

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

    题目分析

      首先是一个深度搜索,来把所有根节点到叶子节点的路径找出来,然后各自判断是否等于目标值,等于目标值的路径加入结果集中。这种思路是没有问题的,我也很快就写出来了,但是我总觉得递归结束条件太过于简单,但是如果不到叶子节点而中途结束的话,就会忽略一些测试案列。比如到某一节点已经等于目标值,但它不是叶子节点,然而还有可能它的叶子节点值为0对吧,那这也是一条路径,不能忽略。

    Java题解

    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    class Solution {
        public List<List<Integer>> pathSum(TreeNode root, int sum) {
            List<List<Integer>> ans = new ArrayList<>();
            DFS(ans,new ArrayList<>(),root,sum,sum);
            return ans;
        }
    
          public void DFS(List<List<Integer>> ans,List<Integer> tmpList,TreeNode node,int sum,int remain)
        {
            //递归结束条件
            if(node==null)
                return;
            //业务逻辑处理
            tmpList.add(node.val);
            remain=remain-node.val;
            if(remain==0&&node.left==null&&node.right==null){
                ans.add(tmpList);
                return;
            }
            DFS(ans,new ArrayList<>(tmpList),node.left,sum,remain);
            DFS(ans,new ArrayList<>(tmpList),node.right,sum,remain);
        }
    }
    

      

  • 相关阅读:
    HDU 5585 Numbers
    HDU 3308 LCIS
    POJ 2991 Crane
    POJ 1436 Horizontally Visible Segments
    POJ 3667 Hotel
    HaiHongOJ 1003 God Wang
    【SDOI 2008】 递归数列
    5月19日省中提高组题解
    【HDU 1588】 Gauss Fibonacci
    【POJ 3233】Matrix Power Series
  • 原文地址:https://www.cnblogs.com/MrSaver/p/9956598.html
Copyright © 2011-2022 走看看