这个题比较坑的一点是 results 不能是 std::set<vector<int>>,要不然会倒在第 19 个用例上。然后就是判断叶子节点了,比较简单,和 NC5、NC7、NC8 一种题型</int>

#include <numeric>

class Solution {
public:
    vector<vector<int>> results;
    int              target = 0;
    void  NodeSum(TreeNode* head, vector<int> sum) {
         if(!head) return;
         sum.push_back(head->val);
         if(head->left == nullptr && head->right == nullptr){
             if(accumulate(sum.begin(), sum.end(), 0) == target)
                 results.push_back(sum);
             return;
         }
        NodeSum(head->left, sum);
        NodeSum(head->right, sum);
    }
    vector<vector<int>> pathSum(TreeNode* root, int sum) {
        if(!root) return {};
        target = sum;
        NodeSum(root, {});
        return results;
    }
};