path_sum
2015-06-06 10:36
344 查看
题目描述
Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that adding up all the values along the path equals the given sum.For example:
Given the below binary tree and sum = 22,
5 / \ 4 8 / / \ 11 13 4 / \ \ 7 2 1
return true, as there exist a root-to-leaf path 5->4->11->2 which sum is 22.
解析思路
题目的意思就是给定一个二叉树,每个结点有数值,给定一个sum,看存不存在一条路径使得该路径上的结点数值和等于sum。这里只要求判断是否存在一条路径,path_sum2则是要求找出所有的路径,这里利用深度优先搜索(DFS)来解决,以给定例子为例分析,判断从根节点是否存在一条sum=22的路径,相当于判断从左儿子开始是否有一条22-5=17的路径,或者从右儿子开始是否有一条22-8=14的路径。详细代码
/** * Definition for binary tree * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ //题目强调是从root到叶子节点 注意叶子节点的定义 public boolean hasPathSum(TreeNode root, int sum) { if(root == null) { //空树 结束条件之一 return false; } else { if(root.left==null && root.right==null) { //叶子节点 left right都为空 if(sum== root.val) { return true; } else { return false; } } else { //非叶子结点 return hasPathSum(root.left, sum-root.val) | hasPathSum(root.right, sum-root.val); } } }
总结
此题目是关于BST和DFS的,前面word_ladder和word_ladder2 是关于graph的BFS(没有建立图,而是利用题目限制的条件进行搜索,否则超时),可以放在一起总结下,此题目还有path_sum2版本,要求算出所有的路径,我会在接下来的文章中介绍。相关文章推荐
- package.json配置
- Hive介绍
- oncopy和onpaste
- VS2010/MFC编程入门之三(VS2010应用程序工程中文件的组成结构)
- 常见的Java的软件包
- opencv中矩阵计算的一些函数
- ArcGIS For JavaScript API Switch Basemap(切换底图)
- 关于ubuntu12.04下firefliy的架设
- Android25图灵聊天项目------适配器选择界面展示数据
- beanUtils支持类型转换
- .net 事务
- LeetCode | Longest Substring Without Repeating Characters
- .net 事务
- 路由器ap client模式无法获取ip问题解决,适合MT7620 7628 7688
- 关于智能寻路算法的研究,A-Star算法拓展,B星寻路算法
- 元 变化
- SRM 627 D1L2GraphInversionsDFS查找指定长度的所有路径 Binary indexed tree (BIT)
- 200(from cache)和304区别
- CGLib与JDK的动态代理
- 在Apache服务器上利用Varnish优化移动端访问的方法