比较简单的bfs遍历,最开始写完之后卡在第13个用例没通过,看了半天代码没发现原因。最后去看了别人的代码,发现每次递归结束之后忘了pop_back(),这就很尴尬。因为在递归中是用同一个数组来记录路径的,所以在一次递归结束后必须要把该路径上的结点去除,才能用于记录另一路径。

/**
 * 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>> result;
        if(!root){
            return result;
        }
        vector<int> ns;
        find(result, root, sum, 0, ns);
        return result;
    }
    void find(vector<vector<int>> &result,TreeNode* p,int sum, int now,vector<int> &ns){
        now += p->val;
        ns.push_back(p->val);
        if(p->left){
            find(result,p->left,sum,now,ns);
        }
        if(p->right){
            find(result, p->right, sum, now,ns);
        }
        if(!p->left && !p->right && now == sum){
            result.push_back(ns);
        }
        //Key sentence.
        ns.pop_back();
    }
};