day18
新学的点:
用累减的方式来查看是否找到了符合条件的路径。
终止条件:
当它为叶子结点,且累减到了 0 。当前叶子结点的值,已经在调用的时候减去了,所以判断的是count == 0
单层逻辑:
先向左遍历,把下一个点和减去这个点之后的值传入。
再向右遍历,把下一个点和减去这个点之后的值传入。
在递归的时候,如果返回值是 true 直接 return true。
traversal 函数参数的意思。
cur 当前遍历的结点
count 减去当前遍历的结点后,所剩下的值。
class Solution {
public:
bool traversal(TreeNode* cur, int count)
{
if(cur->left == nullptr && cur->right == nullptr && count == 0)
return true;
if(cur->left == nullptr && cur->right == nullptr && count != 0)
return false;
if(cur->left) if(traversal(cur->left, count - cur->left->val)) return true;
if(cur->right) if(traversal(cur->right, count - cur->right->val)) return true;
return false;
}
bool hasPathSum(TreeNode* root, int targetSum) {
if(root == nullptr)
return false;
return traversal(root,targetSum - root->val);
}
};