LeetCode 113. 路径总和 II

这题和第112题十分相似,上一题只需判断是否存在路径,这道题则需找到所有的路径。
LeetCode 113. 路径总和 II_第1张图片
思路是完全一样的,直接套用上一题的代码,然后用一个栈,保存路径的顺序。
第112题传送门:112. 路径总和

代码:

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
private:
    vector<vector<int> >v;//存储所以符合条件的路径
    vector<int> tmp; //用vector模拟栈,保存路径
public:
    vector<vector<int> > pathSum(TreeNode* root, int sum) {
        dfs(root, sum);
        return v;
    }
    void dfs(TreeNode* root, int sum){
        if(!root) return;
        tmp.push_back(root->val);//每访问到一个新节点,则入栈
        if(!root->left && !root->right)
        	if(root->val==sum){
                v.push_back(tmp);
            	return;
            }
        if(root->left){
            dfs(root->left, sum-root->val);
            tmp.pop_back(); //回溯时,删去最后访问的节点
        }
        if(root->right){
            dfs(root->right, sum-root->val);
            tmp.pop_back();
        }
    }
};

你可能感兴趣的:(LEETCODE,leetcode,算法,数据结构,二叉树)