You are given a binary tree in which each node contains an integer value.

Find the number of paths that sum to a given value.

The path does not need to start or end at the root or a leaf, but it must go downwards (traveling only from parent nodes to child nodes).

The tree has no more than 1,000 nodes and the values are in the range -1,000,000 to 1,000,000.

Example:

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

      10
/ \
5 -3
/ \ \
3 2 11
/ \ \
3 -2 1 Return 3. The paths that sum to 8 are: 1. 5 -> 3
2. 5 -> 2 -> 1
3. -3 -> 11

题目标签:Tree
  这道题目给了我们一个二叉树,和一个sum,让我们找到有多少条path 的和是等于sum的,这里的path不一定要从root 到底,可以是中间的点开始到下面的点。需要另外设两个functions。
  traverseTree function - preOrder 遍历每一个点,然后把每一个点代入到findPathSum function。
  findPathSum function - 找到从root 开始到各个点的 path sum, 和sum比较,一样的话,就res++。
 
  利用traverseTree 来把每一个点(不同的level)代入findPathSum, 来找到从那个点开始往下的各种path sum,这样就可以包含 中间的点开始到下面的点的这种可能性。而且不会重复,因为每次代入的点,都是唯一的,而且找的path sum都是从这个点起始的。这两个funciton 就相当于 for loop 中间 再包括一个for loop, 来遍历array。
 
 

Java Solution:

Runtime beats 68.27%

完成日期:07/06/2017

关键词:Tree

关键点:利用两个递归functions来搜索从每一层level 各点开始到下面层次点的path值

 /**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution
{
int res = 0;
public int pathSum(TreeNode root, int sum)
{
if(root == null)
return res; traverseTree(root,sum); return res;
} public void traverseTree(TreeNode node, int sum)
{
if(node == null)
return; findPathSum(node, 0, sum);
traverseTree(node.left, sum);
traverseTree(node.right, sum); } public void findPathSum(TreeNode node, int path_sum, int sum)
{
if(node == null)
return; if(path_sum + node.val == sum)
res++; findPathSum(node.left, path_sum + node.val, sum);
findPathSum(node.right, path_sum + node.val, sum); }
}

参考资料:N/A

LeetCode 算法题目列表 - LeetCode Algorithms Questions List

最新文章

  1. 手工配置rsyslog配置文件详解
  2. linux内核调试技巧之addr2line
  3. sql server 中删除表中数据truncate和delete的区别(转载自.net学习网)
  4. 《BI那点儿事》数据流转换——透视
  5. hadoop 突然断电数据丢失问题
  6. 【读书笔记】iOS-NSString的length
  7. jquery validate自定义checkbox验证规则和样式
  8. discuz+ecmall+phpcms整合
  9. TS 流解码过程
  10. 【JavaScript】出现即使设置了ID也获取不到的可能原因与window.onload
  11. css备忘录(关于relative、absolute)
  12. Ibatis之3个不经常使用的Query方法
  13. python函数下篇装饰器和闭包,外加作用域
  14. Java与算法之(3) - 斐波那契数列
  15. 【uWSGI】 实战之操作经验
  16. Python中利用进度条求圆周率
  17. c# System.Object类和数据的安全转型
  18. 常用css属性
  19. 一些常用的mysql语句实例-以后照写
  20. CXF wsdl2java 生成java代码供客户端使用

热门文章

  1. 渗透相关website
  2. CANVAS模仿龙卷风特效
  3. python 脚本开发实战-当当亚马逊图书采集器转淘宝数据包
  4. Linux系统管理命令(1)accton的使用
  5. 由 System.arraycopy 引发的巩固:对象引用 与 对象 的区别
  6. zoj 1884 简单 键盘 字符 处理
  7. zoj 1539 Lot 简单DP 记忆化
  8. 数据库表反向生成(二) Django ORM inspectdb
  9. (转载)RESTful架构风格下的4大常见安全问题
  10. Collection和Map的默认扩容参数