1. 利用回溯的方法去做。
  2. 注意是到叶子节点。
  3. 注意如果路径相等没必要清楚path,因为是回溯会给清除的。
/**
 * struct TreeNode {
 *    int val;
 *    struct TreeNode *left;
 *    struct TreeNode *right;
 * };
 */

class Solution {
public:
    /**
     * 
     * @param root TreeNode类 
     * @param sum int整型 
     * @return int整型vector<vector<>>
     */
    vector<vector<int> > pathSum(TreeNode* root, int sum) {
        // write code here

        vector<vector<int>> results;
        if(!root){
            return results;
        }

        vector<int> path;
        int sum_current = 0;
        pre_order(root,path,results,sum_current,sum);

        return results;
    }

    void pre_order(TreeNode* root, vector<int>& path,vector<vector<int> >& results,int sum,int target){

        if(!root){
            return;
        }

        sum += root->val;
        path.push_back(root->val);
        if(!root->left&&!root->right&&sum == target){
            results.push_back(path);
        }


        pre_order(root->left,path,results,sum,target);
        pre_order(root->right,path,results,sum,target);

        sum-=root->val;
        path.pop_back();

    }
};