112. Path Sum
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,判断在这棵二叉树上是否存在一条从根到叶子的路径,其路径上的所有节点和为sum。
思路
还是需要抓住树具有天然的递归结构,一个问题寻找其子问题。
找左子树是否又路径,找右子树是否有路径,都没有返回false。
递归的终止条件:只有当最后是叶子结点并且值和sum相等返回true,表示找到一条路径
代码
class Solution {
public:
bool hasPathSum(TreeNode* root, int sum) {
if(root == NULL) //root为空表示,在里边找不到任何sum值
{
return false;
}
if(root->left == NULL&&root->right == NULL) //root为叶子节点,当叶子节点的值和sum相等说明找到一条路径
{
return root->val == sum;
}
//查找左子树
if(hasPathSum(root->left,sum-root->val))
{
return true;
}
//查找右子树
if(hasPathSum(root->right,sum-root->val))
{
return true;
}
return false;
}
};