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
思路:求解二叉树的路径和是否满足sum。需要考虑的一点就是有负数,而且如果为0的时候也不能结束,以为也有可能下面的和为0.
题目不难,只是有一些小的点需要注意。具体代码如下:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public boolean hasPathSum(TreeNode root, int sum) {
/**
* 判断根节点是否为空和值是否大于sum,是则false
* 然后判断val和sum是否相等,如果相等且root没有子树。true
* 不相等则递归判断左右子树是否与sum-val相等
*/
if(root == null){//注意,此处不能判断val与sum大小,因为存在负数
return false;
}
if(root.val == sum){
//注意:因为存在负数,所以左右子树不为空也不能直接返回flase
//有可能左右子树的和值为0
if(root.left == null && root.right == null)
return true;
}
//小于
return hasPathSum(root.left,sum-root.val)||hasPathSum(root.right,sum-root.val);
}
}