简单的递减,每层减去自己的值,到最后和叶子节点的值比较即可,若和叶子节点值相等,则该路径的和正好相等。

c++实现

class Solution {
public:
    vector<vector<int>> res;
    void Path(TreeNode* Node, vector<int> single, int expectNumber){
        if(!Node){            //到底了,返回
            return ;
        }else{
            single.push_back(Node->val);   //将结点值放入单路径容器中
        }
        if(!Node->left && !Node->right && expectNumber == Node->val){
            res.push_back(single);    //若叶子节点的值和递减下来的值相同,则该路径符合条件,加入到res路径容器当中
        }
        //往下走,将本节点的值减去,每层都去掉本节点的值,到最后叶子节点应该正好和这个值相等
        Path(Node->left, single, expectNumber-Node->val);
        Path(Node->right, single, expectNumber-Node->val);
    }
    vector<vector<int>> FindPath(TreeNode* root,int expectNumber) {
        vector<int> single;
        Path(root, single, expectNumber);
        return res;
    }
};