描述
给定一个二叉树root和一个值 sum ,判断是否有从根节点到叶子节点的节点值之和等于 sum 的路径。
1.该题路径定义为从树的根结点开始往下一直到叶子结点所经过的结点
2.叶子节点是指没有子节点的节点
3.路径只能从父节点到子节点,不能从子节点到父节点
4.总节点数目为n
例如:
给出如下的二叉树,sum=22,
返回true,因为存在一条路径 5\to 4\to 11\to 25→4→11→2的节点值之和为 22
数据范围:
1.树上的节点数满足0≤n≤10000
2.每 个节点的值都满足 0∣val∣≤1000
要求:空间复杂度O(n),时间复杂度O(n)
进阶:空间复杂度 O(树的高度),时间复杂度 O(n)
示例1
输入:{5,4,8,1,11,#,9,#,#,2,7},22
返回值:true
示例2
输入:{1,2},0
返回值:false
示例3
输入:{1,2},3
返回值:true
示例4
输入:{},0
返回值:false
代码
/**
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
class Solution {
public:
/**
*
* @param root TreeNode类
* @param sum int整型
* @return bool布尔型
*/
bool hasPathSum(TreeNode* root, int sum) {
// write code here
if(!root)
return false;
sum=sum-(root->val);
if(root->left==nullptr&&root->right==nullptr){
if(sum==0){
return true;
}else
return false;
}
return hasPathSum(root->left, sum)||hasPathSum(root->right, sum);
}
};