112. Path Sum
by Botao Xiao
Question
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.
Note: A leaf is a node with no children.
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.
Thinking:
- Method 1:递归
- 这道题有一种特殊情况,当输入为[1, 2],sum为1.
- 1
- /
- 2
- 此时我们return false。
- 这道题有一种特殊情况,当输入为[1, 2],sum为1.
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public boolean hasPathSum(TreeNode root, int sum) {
if(root == null) return false;
return pathCount(root, 0, sum);
}
private static boolean pathCount(TreeNode node, int count, int sum){
if(node == null){
if(count == sum)
return true;
return false;
}else{
if(node.left == null)
return pathCount(node.right, count + node.val, sum);
else if(node.right == null)
return pathCount(node.left, count + node.val, sum);
else
return pathCount(node.left, count + node.val, sum) || pathCount(node.right, count + node.val, sum);
}
}
}
二刷
简化了一刷时候的一些多余的逻辑判断。但是一刷时候的一些corner cases还是没有考虑进去。
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public boolean hasPathSum(TreeNode root, int sum) {
if(root == null) return false;
return hasPathSum(root, sum, 0);
}
private boolean hasPathSum(TreeNode node, int sum, int current){
if(node.left == null && node.right == null){
return (current + node.val) == sum;
}else if(node.left != null && node.right == null){
return hasPathSum(node.left, sum, current + node.val);
}else if(node.left == null && node.right != null){
return hasPathSum(node.right, sum, current + node.val);
}else{
return hasPathSum(node.left, sum, current + node.val) || hasPathSum(node.right, sum, current + node.val);
}
}
}
Subscribe via RSS