思路分析:
hasPathSum
是主要的公共函数,它检查给定二叉树中是否存在一条路径的节点值之和等于给定目标值。dfs
是深度优先搜索的辅助函数,它通过递归遍历二叉树的每个路径,并在叶子节点检查路径和是否等于目标值。- 如果找到一条路径的节点值之和等于目标值,则通过
result
计数器记录这样的路径数量。 - 最终,
hasPathSum
返回true
如果至少存在一条满足条件的路径,否则返回false
。 - 示例中通过
main
函数展示了如何使用这个类,并检查给定二叉树是否有一条路径的和等于给定目标值。
/**
* Definition for a binary tree node.
* 二叉树节点的定义
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
private :
/**
* 深度优先搜索函数,用于计算从当前节点到叶子节点的路径和是否等于目标和
* @param root 当前节点
* @param targetSum 目标和
* @param newsum 当前路径和
* @param result 用于记录满足条件的路径数量
*/
void dfs(struct TreeNode* root, int targetSum, int newsum, int &result) {
// 如果当前节点是叶子节点
if (root->left == NULL && root->right == NULL) {
// 如果当前路径和等于目标和,则增加结果数量
if (newsum == targetSum)
result++;
return;
}
// 递归处理左子树
if (root->left) {
dfs(root->left, targetSum, newsum + root->left->val, result);
}
// 递归处理右子树
if (root->right) {
dfs(root->right, targetSum, newsum + root->right->val, result);
}
return;
}
public:
/**
* 判断二叉树中是否存在从根节点到叶子节点的路径,使得路径和等于目标和
* @param root 二叉树的根节点
* @param targetSum 目标和
* @return 存在路径则返回true,否则返回false
*/
bool hasPathSum(TreeNode* root, int targetSum) {
// 如果根节点为空,直接返回false
if (root == NULL)
return false;
// 初始化结果数量
int result = 0;
// 调用深度优先搜索函数
dfs(root, targetSum, root->val, result);
// 如果结果数量为0,表示没有满足条件的路径,返回false;否则返回true
if (result == 0)
return false;
else
return true;
}
};