Path Sum II

Given a binary tree and a sum,find all root-to-leaf paths where each path‘s sum equals the given sum.

For example:
Given the below binary tree and sum = 22,

              5
             /             4   8
           /   /           11  13  4
         /  \    /         7    2  5   1

return

[
   [5,4,11,2],[5,8,5]
]

//method1:递归版本
class Solution{
    public:
        vector<vector<int>> pathSum(TreeNode* root,int sum){
            vector<vector<int>> res;
            vector<int> out;
            helper(root,sum,out,res);
            return res;
        }
    
    void helper(TreeNode* node,int sum,vector<int>& out,vector<vector<int>>& res){
        if(!node) return;
        out.push_back(node->val);//1
        if(sum == node->val && !node->left && !node->right){
            res.push_back(out);
        } 
        
        helper(node->left,sum-node->val,out,res);
        helper(node->right,res);
        out.pop_back();//由于以上1处是先把val加到vector中,如果不符合需要跳转到上一级,此处需要弹出处理;  
    }
};


//迭代版本
//注意:11处要考虑最左节点不是叶子节点,下面还有一个右子节点的情况;
//可以参看:https://www.cnblogs.com/grandyang/p/4042156.html
class Solution{
    public:
          vector<vector<int>> pathSum(TreeNode* root,int sum){
            vector<vector<int>> res;
            vector<TreeNode*> s;
            TreeNode *cur = root,*pre = NULL;
            int val = 0;
            while(cur || !s.empty()){
                while(cur){
                    s.push_back(cur);
                    val += cur->val;
                    cur = cur->left;
                }
                cur = cur->back();  
                if(!cur->left && !cur->right && val == sum){
                    vector<int> v;
                    for(auto it : s){
                        v.push_back(it->val);
                    }
                    res.push_back(v);
                }
                if(cur->right && cur->right != pre) cur = cur->right;//11
                else{
                    pre = cur;
                    val -= cur->val;
                    s.pop_back();
                    cur = NULL;
                }
            }  
              
            return res;
          }
};

相关文章

自1998年我国取消了福利分房的政策后,房地产市场迅速开展蓬...
文章目录获取数据查看数据结构获取数据下载数据可以直接通过...
网上商城系统MySql数据库设计
26个来源的气象数据获取代码
在进入21世纪以来,中国电信业告别了20世纪最后阶段的高速发...