首页 > 其他 > 详细

Path Sum II

时间:2019-09-15 14:42:29      阅读:89      评论:0      收藏:0      [点我收藏+]

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,4,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, sum-node->val,out,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;
          }
};

 













































Path Sum II

原文:https://www.cnblogs.com/hujianglang/p/11521959.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!