题解
DFS方法
深度优先搜索二叉树, 到根节点和为目标就返回true 否则返回false
因为是二叉树 所以不需要记录是否访问过 每个节点只会访问到一次
class Solution {
public:
bool hasPathSum(TreeNode* root, int targetSum) {
if (root == nullptr) return false;
return DFS(root, 0, targetSum);
}
bool DFS(TreeNode *node, int sum, int targetSum) {
sum += node->val;
if(sum == targetSum && node->left == nullptr && node->right == nullptr) {
return true;
}
if(node->left != nullptr) {
bool flag = DFS(node->left, sum, targetSum);
if (flag) return true;
}
if(node->right != nullptr) {
bool flag = DFS(node->right, sum, targetSum);
if (flag) return true;
}
return false;
}
};
广度优先搜索解法
class Solution {
public:
bool hasPathSum(TreeNode* root, int targetSum) {
if (root == nullptr) return false;
return BFS(root, targetSum);
}
bool BFS(TreeNode *node, int targetSum) {
queue<pair<TreeNode*, int>> que;
que.push(make_pair(node, node->val));
while (!que.empty()) {
pair<TreeNode*, int> pa = que.front();
que.pop();
TreeNode *t = pa.first;
int sum = pa.second;
if (sum == targetSum && t->left == nullptr && t->right == nullptr) return true;
if (t->left != nullptr) {
int sum1 = sum + t->left->val;
que.push(make_pair(t->left, sum1));
}
if (t->right != nullptr) {
int sum2 = sum + t->right->val;
que.push(make_pair(t->right, sum2));
}
}
return false;
}
};