437. 路径总和 III

给定一个二叉树,它的每个结点都存放着一个整数值。

找出路径和等于给定数值的路径总数。

路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。

二叉树不超过1000个节点,且节点数值范围是 [-1000000,1000000] 的整数。

示例:

root = [10,5,-3,3,2,null,11,3,-2,null,1], sum = 8

  1. 10
  2. / \
  3. 5 -3
  4. / \ \
  5. 3 2 11
  6. / \ \
  7. 3 -2 1

返回 3。和等于 8 的路径有:

  1. 5 -> 3
  2. 5 -> 2 -> 1
  3. -3 -> 11

双重递归

  1. /*
  2. 思路:
  3. 1.dfs是求从根节点出发到叶子节点满足条件的路径总数
  4. 2.将给定的二叉树看成三个部分:根节点、左子树、右子树
  5. 3.三部分可以看成一个递归结构,先求从根节点出发满足条件的路径总数(dfs(root)),
  6. 再递归求左子树(pathSum(root.left)),递归求右子树(pathSum(root.right))
  7. 总结:
  8. 1.双重递归,从全局找外层递归(如思路中的三个部分),再从部分中找内层递归(如思路中的dfs)
  9. */
  10. class Solution {
  11. private int count = 0; //存放结果
  12. public int pathSum(TreeNode root, int sum) {
  13. if(root == null) return 0;
  14. dfs(root, sum); //求从根节点出发满足条件的路径总数
  15. pathSum(root.left, sum); //递归求左子树
  16. pathSum(root.right, sum); //递归求右子树
  17. return count;
  18. }
  19. private void dfs(TreeNode root, int sum){
  20. if(root == null) return;
  21. sum -= root.val;
  22. if(sum == 0) count++; //满足条件结果加一
  23. dfs(root.left, sum); //继续往左子树找
  24. dfs(root.right, sum); //继续往右子树找
  25. }
  26. }

单重递归

  1. /*
  2. 思路:
  3. 1.用双重递归会重复计算很多次,其实我们只用单递归就可以解决,
  4. 不妨将已经走过的路径值保存到book数组
  5. 2.到i节点,就可以根据book倒序遍历,找到从i节点到根节点满足条件的路径总数
  6. 3.递归到最底层也就是叶子节点时,找出叶子节点到根节点的满足条件的路径总数之后,
  7. 需要将book数组回溯到上一层的状态,以便从上一层继续寻找
  8. 总结:
  9. 1.将已经求出的值保存,当下次递归时可以直接使用,
  10. 省去了重复计算浪费的时间,相当于用空间换取时间
  11. 2.递归返回到上层时,我们有时需要原来上层递归的状态,这时就需要用到回溯
  12. */
  13. class Solution {
  14. private int count = 0; //存放结果
  15. public int pathSum(TreeNode root, int sum) {
  16. dfs(root, sum, new ArrayList<Integer>());
  17. return count;
  18. }
  19. private void dfs(TreeNode root, int sum, ArrayList<Integer> book){
  20. if(root == null) return;
  21. book.add(root.val); //加入当前节点的值
  22. int cur_sum = 0;
  23. for(int i = book.size() - 1; i >= 0; i--){ //从当前节点往根节点寻找满足条件的路径总数
  24. cur_sum += book.get(i);
  25. if(cur_sum == sum) count++;
  26. }
  27. dfs(root.left, sum, book); //递归求左子树
  28. dfs(root.right, sum, book); //递归求右子树
  29. book.remove(book.size() - 1); //回溯到上一次的状态,以便继续寻找
  30. }
  31. }

【LeetCode】437. 路径总和 III的更多相关文章

  1. Java实现 LeetCode 437 路径总和 III(三)

    437. 路径总和 III 给定一个二叉树,它的每个结点都存放着一个整数值. 找出路径和等于给定数值的路径总数. 路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点 ...

  2. Leetcode 437.路径总和III

    路径总和III 给定一个二叉树,它的每个结点都存放着一个整数值. 找出路径和等于给定数值的路径总数. 路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点). ...

  3. [LeetCode] 437. 路径总和 III ☆☆☆(递归)

    路径总和 III 描述 给定一个二叉树,它的每个结点都存放着一个整数值. 找出路径和等于给定数值的路径总数. 路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子 ...

  4. leetcode 437. 路径总和 III

    题目描述: 给定一个二叉树,它的每个结点都存放着一个整数值. 找出路径和等于给定数值的路径总数. 路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点). 二 ...

  5. 437. 路径总和 III

    方法一:48 ms /* sumUp递归子程序求解以root为根节点的子节点之和为sum的路径数目; pathSum递归部分是把根节点逐一考察,如以root->left,以root->ri ...

  6. 437路径总和III

    题目: 给定一个二叉树,它的每个结点都存放着一个整数值.找出路径和等于给定数值的路径总数.路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点).来源: ht ...

  7. LeetCode 112. 路径总和(Path Sum) 10

    112. 路径总和 112. Path Sum 题目描述 给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和. 说明: 叶子节点是指没有子节点的节 ...

  8. [二叉树-根到叶的子路径]路径总和 III (两层递归)

    题目437. 路径总和 III 给定一个二叉树,它的每个结点都存放着一个整数值. 找出路径和等于给定数值的路径总数. 路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父 ...

  9. LeetCode:路径总和II【113】

    LeetCode:路径总和II[113] 题目描述 给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径. 说明: 叶子节点是指没有子节点的节点. 示例:给定如下二叉树, ...

随机推荐

  1. Java操作数据库——使用JDBC连接数据库

    Java操作数据库——使用JDBC连接数据库 摘要:本文主要学习了如何使用JDBC连接数据库. 背景 数据持久化 数据持久化就是把数据保存到可掉电式存储设备中以供之后使用.大多数情况下,特别是企业级应 ...

  2. Bootstrap Bootstrap表格插件bootstrap-table配置与应用小结

    Bootstrap表格插件bootstrap-table配置与应用小结   by:授客 QQ:1033553122 1.   测试环境 win7 JQuery-3.2.1.min.js 下载地址: h ...

  3. scrapy实例:爬取天气、气温等

    1.创建项目 scrapy startproject weather # weather是项目名称 scrapy crawl spidername开始运行,程序自动使用start_urls构造Requ ...

  4. CSS学习笔记-动画模块

    动画模块:    1.过渡和动画之间的异同        1.1不同点            (1)过渡必须人为触发才能执行            (2)动画不需要人为触发就可以执行        1 ...

  5. 数据结构笔记1(c++)_指针

    一.数据结构概述 1.定义: 我们如何把现实中大量而复杂的问题,以特定的数据类型和特定的存储结构保存到主存储器(内存)中,以及在此基础上为实现某个功能(比如查找某个元素,删除某个元素,对所有元素进行排 ...

  6. Transportable tablespace on standby (Doc ID 788176.1)

    APPLIES TO: Oracle Database - Enterprise Edition - Version 10.2.0.1 to 10.2.0.4 [Release 10.2]Oracle ...

  7. pip 查看软件包 可用版本并安装; pip 查看 numpy 可用版本并安装

    最近需要安装 numpy 的旧版本,发现不知道如何查看可以安装旧版本,解决方法在此进行记录: 然后找到你对应的版本进行安装就可以了: 保持更新,更多精彩内容,请关注 cnblogs.com/xuyao ...

  8. 201871010112-梁丽珍《面向对象程序设计(java)》第十三周学习总结

    项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p ...

  9. WPF (DataGridRowHeaderStyle)实现自义定行样式 并绑定数据

    原文:WPF (DataGridRowHeaderStyle)实现自义定行样式 并绑定数据 功能阐述 就上面那图片 刚开始 考虑使用 RowHeaderTemplate 来实现  发现总绑定不上数据  ...

  10. 【python爬虫】requests模块

    文档:从 pythoneer 到 pythonista 的100个模块 链接:http://note.youdao.com/noteshare?id=2b95bb3651c21af80ca1936f8 ...