概述
文章目录
- 1.题目描述
- 2.解题思路
- 3.代码实现
1.题目描述
给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true ;否则,返回 false 。
叶子节点是指没有子节点的节点。
示例 1:
输入:root = [5,4,8,11,null,13,4,7,2,null,null,null,1], targetSum = 22
输出:true
解释:等于目标和的根节点到叶节点路径如上图所示。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/path-sum
2.解题思路
这一题我们需要在遇到叶子结点,而路径之和不为目标值之后进行回溯。所以这一题需要用到递归加回溯。
既然提到了递归,就需要确定递归的三个条件:
- 递归函数的参数和返回类型:参数应当是每次遍历的结点和当前的计数值count,返回值必须有,为bool类型。
- 确定终止条件:如果遍历到叶子结点,计数值count为0(这里用目标值减去每个结点的val)的话,则返回true,如果遍历到叶子结点计数值count不为0则返回false。
- 确定单层遍历的逻辑:递归函数有返回值,如果返回值为true的话,就立刻返回true。
3.代码实现
/**
* 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 {
public:
bool hasPathSum(TreeNode* root, int targetSum) {
if(root == nullptr) return false;
return travelsal(root, targetSum - root->val);
}
private:
bool travelsal(TreeNode* node, int count)
{
if(node->left == nullptr && node->right == nullptr && count == 0) return true;//到子节点且val和等于count
if(node->left == nullptr && node->right == nullptr) return false;//到子节点但val和不等于count
if(node->left)
{
count -= node->left->val;
if(travelsal(node->left, count)) return true;
count += node->left->val;
}
if(node->right)
{
count -= node->right->val;
if(travelsal(node->right, count)) return true;
count += node->right->val;
}
return false;
}
};
最后
以上就是默默溪流为你收集整理的算法(二叉树)——路径总和的全部内容,希望文章能够帮你解决算法(二叉树)——路径总和所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复