您的位置:首页 > 其它

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版本,要求算出所有的路径,我会在接下来的文章中介绍。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: