题目描述
给定一个二叉树和一个值\ sum sum,判断是否有从根节点到叶子节点的节点值之和等于\ sum sum 的路径
例如:
给出如下的二叉树,
s
u
m
=
22
sum = 22
sum=22
返回 true,因为存在一条路径 5→4→11→2 的节点值之和为 22
分析
- 方法1:使用递归来实现
- 方法2:用 DFS 实现(使用栈)
代码实现
/**
* 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 == NULL) return false;
if (root->val == sum && root->left==NULL && root->right==NULL) return true;
bool inLeft = hasPathSum(root->left, sum - root->val);
bool inRight = hasPathSum(root->right, sum - root->val);
return inLeft || inRight;
}
};