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.
5
/ \
4 8
/ / \
11 13 4
/ \ \
7 2 1
public boolean hasPathSum(TreeNode root, int sum) {
if (root == null) {
return false;
}
if (root.left == null && root.right == null && sum - root.val == 0) {
return true;
}
return hasPathSum(root.left, sum - root.val) || hasPathSum(root.right, sum - root.val);
}
private boolean helper(TreeNode root, int target, int sumSoFar) {
if (root == null) {
return false;
}
sumSoFar += root.val;
if (root.left == null && root.right == null) {
if (sumSoFar == target) {
return true;
}
}
boolean left = helper(root.left, target, sumSoFar);
boolean right = helper(root.right, target, sumSoFar);
return left || right;
}
public boolean hasPathSum(TreeNode root, int sum) {
if (root == null) {
return false;
}
return helper(root, sum, 0);
}
private boolean helper(TreeNode root, int target, int sumSoFar) {
sumSoFar += root.val;
if (root.left == null && root.right == null) {
if (sumSoFar == target) {
return true;
}
}
boolean left = false;
if (root.left != null) {
left = helper(root.left, target, sumSoFar);
}
boolean right = false;
if (root.right != null) {
right = helper(root.right, target, sumSoFar);
}
return left || right;
}