题目:
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 andsum = 22,
5 / \ 4 8 / / \ 11 13 4 / \ \ 7 2 1
return true, as there exist a root-to-leaf path5->4->11->2which sum is 22.
题意:
给定一棵二叉树和一个和,确定该树是否有根到叶的路径,以便将路径上的所有值相加等于给定的和
解题思路:
使用DFS解决
判断root是否为null ,是就返回false
递归的终止条件就是 当前节点的值是否等于sum ,同时需要判断左右结点已经是否为空
由于题目需要返回true or false ,所以我们返回值可以同时遍历左右子树,只有有一边符合条件就返回true, 由于我们上一步是判断当前结点的值是否等于sum,所以在递归的条件中,我们就需要把sum设为 sum-root.val;也就是每次递归都减去当前节点的值,减到最后如果等于当前结点的值同时符合左右结点为空,那么当前结点就是符合题目要求的了。
代码:
public boolean hasPathSum(TreeNode root, int sum) {
if(root == null ) {
return false;
}
if(root.left == null && root.right == null && root.val == sum) {
return true;
}
return hasPathSum(root.left,sum-root.val) || hasPathSum(root.right,sum-root.val);
}