面试题 04.12. 求和路径

题目

这道题有意思的一点是:路径不一定得从根节点开始,也不一定得到叶子节点结束,这道题2叉树和为某一个值的路径比较像,本质上还是一道DFS类型的题目
那么因为可以从任意一个节点开始,所以我们需要遍历到每个节点作为开始,满足条件的时候结束

class Solution {
private:
    int cnt = 0;
public:
    int pathSum(TreeNode* root, int sum) {
        if(!root)
            return cnt;
        pre_order(root, sum);
        return cnt;
    }

   void dfs(TreeNode *root, int sum){
        if(!root)
            return;
        if(root->val == sum)
            cnt++;

        dfs(root->left,sum - root->val);
        dfs(root->right, sum -root->val);
   }

   void pre_order(TreeNode *root, int sum){
       /*
       路径有可能从任何节点开始,所以干脆前序遍历一遍
       */
       if(!root)
            return;
        dfs(root, sum);//同时看从root这个节点开始的时候,有没有符合条件的路径
        pre_order(root->left, sum);
        pre_order(root->right, sum);
   }
};
posted @ 2020-08-09 22:10  real-zhouyc  阅读(191)  评论(0编辑  收藏  举报