一、问题描述
此题为第112题,题目链接:力扣https://leetcode.cn/problems/path-sum/
图1-1
如图1-1,现在要判断一棵二叉树是否有这样一条根节点到叶子节点的路径,路径上的节点值相加是否等于给定的值targetSum。
示例1:
图1-2
如图1-2,给定目标值targetSum为22,二叉树中[5,4,11,2]这条路径上的节点值的和等于targetSum,结果返回true,否则返回false。
二、技术路线
利用树的深度优先搜索。
1.从树的根节点一直向下遍历找到叶子节点,
2.向下遍历的过程中用targetSum减当前节点的值,
3.如果遍历到叶子节点时,targetSum等于叶子节点的值,则说明存在一条路径,这条路径上节点的和等于targetSum,结果返回true。
三、代码实现
class Solution {
public:
bool hasPathSum(TreeNode* root, int targetSum) {
if(root == nullptr) {
return false;
}
if(root->left == nullptr && root->right == nullptr) {
//叶子节点
return targetSum == root->val;
}
//非叶子节点,减去节点值,继续DFS
if(hasPathSum(root->left, targetSum - root->val) || hasPathSum(root->right, targetSum - root->val)) {
return true;
}
return false;
}
};