26.路径总和
题目内容:
代码及思路:
刚开始写的时候因为剑指offer上有类似的题目,就想着用递归方法,创建一个栈。从根节点开始遍历,一直到叶节点结束,如果满足条件(==target)则依次压入栈,不满足则一个个弹出返回父节点,依次迭代。
但是!!后面想到有一种更简单的方法,也就是每遍历一个节点,目标和变化了,即变为target-当前节点值。也就是接下来遍历迭代时可以根据这一特点,代码就好写很多!!
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
bool hasPathSum(TreeNode* root, int sum) {
if(root==nullptr)
return false;
//若不存在左右叶节点,且当前累积和满足target值,则直接返回true
if(root->left==nullptr&&root->right==nullptr&&root->val==sum)
return true;
if(hasPathSum(root->left,sum-root->val))
return true;
if(hasPathSum(root->right,sum-root->val))
return true;
return false;
}
};