zoukankan      html  css  js  c++  java
  • 路径总和(leetcode 113)

    题目描述如下所示:

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

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

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

     

    思路:从根节点开始,分别遍历左右子树,如果到达叶子节点且满足路径之和等于sum,则加入到结果中

     1 /**
     2  * Definition for a binary tree node.
     3  * public class TreeNode {
     4  *     int val;
     5  *     TreeNode left;
     6  *     TreeNode right;
     7  *     TreeNode(int x) { val = x; }
     8  * }
     9  */
    10 class Solution {
    11 
    12     public List<List<Integer>> pathSum(TreeNode root, int sum) {
    13         List<List<Integer>> res = new ArrayList<>();
    14         backtrack(root, sum, new ArrayList<>(), res);
    15         return res;
    16     }
    17 
    18     private void backtrack(TreeNode root, int sum, List<Integer> list, List<List<Integer>> res) {
    19         if (root == null) {
    20             return ;
    21         }
    22         // 添加当前值到路径中
    23         list.add(root.val);
    24         sum -= root.val;
    25 
    26         if (0 == sum && root.left == null && root.right == null) {
    27             res.add(new ArrayList<>(list));
    28         } 
    29 
    30         backtrack(root.left, sum, list, res);
    31         backtrack(root.right, sum, list, res);
    32         // 重置状态
    33         list.remove(list.size() - 1);
    34     }
    35 }
  • 相关阅读:
    函数的内置方法
    函数
    文件操作
    三元运算
    流程控制
    集合
    div容器内文本对齐--神奇的css
    Struts2的零配置和rest插件
    MIME类型
    ganymed-ssh2使用
  • 原文地址:https://www.cnblogs.com/skylv/p/13389837.html
Copyright © 2011-2022 走看看