[LeetCode] Path Sum

Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that adding up all the values along the path equals the given sum. For example: Given the below binary tree and sum = 22,

              5
             / 
            4   8
           /   / 
          11  13  4
         /        
        7    2      1

return true, as there exist a root-to-leaf path 5->4->11->2 which sum is 22.

/**
 * Definition for binary tree
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    int summary;
    bool has;
    bool hasPathSum(TreeNode *root, int sum) {
        if(root==NULL)
            return false;
        this->summary = sum;
        this->has = false;
        fun(root);
    return has;
    }
private:
    void fun(TreeNode *p)
    {
       if(p!=NULL)
       {
           if(p->left==NULL && p->right==NULL && p->val==this->summary)
           {
               this->has = true;
               return ;
           }
           else
           {
               if(p->left != NULL)
               {
                   p->left->val += p->val;
                   fun(p->left);
               }
               if(p->right != NULL)
               {
                   p->right->val += p->val;
                   fun(p->right);
               }
           }
       
       }//end if
    
    }
};

思路:参考Trie树的思想,树的每个结点带有需要的信息,这里每个结点的值是从根节点到此结点的路径和,然后只需判断叶子节点上的值是不是题中要求的sum就可以了。

原文地址:https://www.cnblogs.com/Xylophone/p/3869550.html