给定二叉树和求和,确定树是否具有根到叶路径,使得沿路径的所有值相加等于给定的总和。
样例
Example 1:
Input:tree = [5,4,8,11,#,13,4,7,2,#,#,#,#,#,1], sum = 22
Output: true
Explanation: Given the below binary tree
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.
Example 2:
Input:tree = [5,4,8], sum =18
Output: false
注意事项
叶子是没有孩子的节点。
题解:遍历二叉树,找出每一条从根到叶的值即可。
/**
* Definition of TreeNode:
* class TreeNode {
* public:
* int val;
* TreeNode *left, *right;
* TreeNode(int val) {
* this->val = val;
* this->left = this->right = NULL;
* }
* }
*/
class Solution {
public:
/**
* @param root: the tree
* @param sum: the sum
* @return: if the tree has a root-to-leaf path
*/
bool pathSum(TreeNode * root, int sum) {
// Write your code here.
bool judge=false;
recursion(root,sum,judge);
return judge;
}
void recursion(TreeNode * root, int sum,bool &judge)
{
if(root->left==NULL&&root->right==NULL&&sum-root->val==0) judge=true;
else
{
if(judge)return;
if(root->left)recursion(root->left,sum-root->val,judge);
if(root->right)recursion(root->right,sum-root->val,judge);
}
}
};