Day92 | 灵神 | 二叉树 路径总和
112.路径总和
112. 路径总和 - 力扣(LeetCode)
思路:
1.递归函数意义
如果在根节点为t的树中可以找到长度为target的路径就返回true,找不到就返回false
2.参数和返回值
bool tra(TreeNode *t,int target)
参数中的target在传入之前会先减掉当前结点的值作为给下一个结点传入的值
如果在根节点为t的树中可以找到长度为target的路径就返回true,找不到就返回false
3.终止条件(边界条件)
如果我们碰到了空节点,那就是false,说明没找到路径
if(t==nullptr)return false;
4.本层逻辑(非边界条件)
减去本层节点值之后判断是否是我们要找的路径
即在叶子结点,并且target也减到0了
然后递归遍历左右子树,不管哪边找到了我们都可以返回true
target-=t->val;if(t->left==nullptr&&t->right==nullptr)return target==0;bool l=tra(t->left,target);bool r=tra(t->right,target);return l||r;
完整代码:
class Solution {
public:bool tra(TreeNode *t,int target){if(t==nullptr)return false; target-=t->val;if(t->left==nullptr&&t->right==nullptr)return target==0;bool l=tra(t->left,target);bool r=tra(t->right,target);return l||r;}bool hasPathSum(TreeNode* root, int targetSum) {return tra(root,targetSum);}
};/*
class Solution {
public:bool flag=false;void tra(TreeNode *t,int target){if(t==nullptr)return;target-=t->val;if(t->left==nullptr&&t->right==nullptr&&target==0)flag=true;tra(t->left,target);tra(t->right,target);}bool hasPathSum(TreeNode* root, int targetSum) {tra(root,targetSum);return flag;}
};*/