112. 路径总和

112. 路径总和

给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true ;否则,返回 false 。

叶子节点 是指没有子节点的节点。

 

示例 1:

输入:root = [5,4,8,11,null,13,4,7,2,null,null,null,1], targetSum = 22
输出:true
解释:等于目标和的根节点到叶节点路径如上图所示。

示例 2:

输入:root = [1,2,3], targetSum = 5
输出:false
解释:树中存在两条根节点到叶子节点的路径:
(1 --> 2): 和为 3
(1 --> 3): 和为 4
不存在 sum = 5 的根节点到叶子节点的路径。

示例 3:

输入:root = [], targetSum = 0
输出:false
解释:由于树是空的,所以不存在根节点到叶子节点的路径。

 

提示:

  • 树中节点的数目在范围 [0, 5000] 内
  • -1000 <= Node.val <= 1000
  • -1000 <= targetSum <= 1000

DFS解法:

复制代码
 1 /**
 2  * Definition for a binary tree node.
 3  * struct TreeNode {
 4  *     int val;
 5  *     TreeNode *left;
 6  *     TreeNode *right;
 7  *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 8  *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 9  *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
10  * };
11  */
12 class Solution {
13 public:
14     bool dfs(TreeNode *root, int sum) {
15         if (root == nullptr) {
16             return false;
17         }
18         sum -= root->val;
19         if (root->left == nullptr && root->right == nullptr && sum == 0) {
20             return true;
21         }
22         return dfs(root->left, sum) || dfs(root->right, sum);
23     }
24     bool hasPathSum(TreeNode* root, int targetSum) {
25         return dfs(root, targetSum);
26     }
27 };
复制代码

 BFS解法:

复制代码
 1 /**
 2  * Definition for a binary tree node.
 3  * struct TreeNode {
 4  *     int val;
 5  *     TreeNode *left;
 6  *     TreeNode *right;
 7  *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 8  *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 9  *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
10  * };
11  */
12 class Solution {
13 public:
14     bool hasPathSum(TreeNode* root, int targetSum) {
15         if (root == nullptr) {
16             return false;
17         }
18 
19         queue<TreeNode*> q;
20         q.push(root);        
21         while (!q.empty()) {
22             int size = q.size();
23             for (int i = 0; i < size; i++) {
24                 TreeNode *temp = q.front();
25                 q.pop();
26                 if (temp->left == nullptr && temp->right == nullptr) {
27                     if (temp->val == targetSum) {
28                         return true;
29                     }
30                     continue;
31                 }
32                 if (temp->left != nullptr) {
33                     temp->left->val += temp->val;
34                     q.push((temp->left));
35                 }
36                 if (temp->right != nullptr) {
37                     temp->right->val += temp->val;
38                     q.push(temp->right);
39                 }
40             }
41         }
42         return false;
43     }
44 };
复制代码

 

 

posted @   跳动的休止符  阅读(28)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示