zoukankan      html  css  js  c++  java
  • leetcode113.路径总和II

    给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。

    说明: 叶子节点是指没有子节点的节点。

    示例:
    给定如下二叉树,以及目标和 sum = 22,

        5
       /
      4   8
      /    /
      11    13  4
     /         /
    7  2       5   1
    返回:

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

    和112题不同的是要保存每条符合条件的路径,path实现上有两种方法,一种是作为成员变量,需要自己写回退的时机,另一种是作为参数值传递,当返回上一层时path数组自动恢复上一层的值。

    方法一(path作为成员变量):

    class Solution {
        vector<int> path;
        vector<vector<int>> res;
    public:
        vector<vector<int>> pathSum(TreeNode* root, int sum) 
        {
            if(!root) return res;
            
            findpath(root, sum);
            return res;
        }
    
        void findpath(TreeNode *root, int sum)
        {
            if(!root->left && !root->right && root->val == sum) {
                path.push_back(root->val);
                res.push_back(path);
                path.pop_back();
                return;
            }
            if(!root->left && !root->right) return;
            
            //非叶节点
            path.push_back(root->val);
            if(root->left) findpath(root->left, sum - root->val);
            if(root->right) findpath(root->right, sum - root->val);
            
            path.pop_back();
        }
    };

    方法二:

    class Solution {
        vector<vector<int>> res;
    public:
        vector<vector<int>> pathSum(TreeNode* root, int sum) 
        {
            if(!root) return res;
            vector<int> path;
            findpath(root, path, sum);
            return res;
        }
    
        void findpath(TreeNode *root, vector<int> path, int sum)
        {
            if(!root->left && !root->right && root->val == sum) {
                path.push_back(root->val);
                res.push_back(path);
                return;
            }
            if(!root->left && !root->right) return;
            //else {
                path.push_back(root->val);
                if(root->left) findpath(root->left, path, sum - root->val);
                if(root->right) findpath(root->right, path, sum - root->val);
            //}
            
        }
    };
  • 相关阅读:
    STL中的map
    HDU 4027 Can you answer these queries?
    HDU 2199 Can you solve this equation?
    USACO section1.2 Name That Number 命名那个数字
    HDU 3790 最短路径问题 (双重权值)
    [笔记]CiscoPT配置RIP
    [笔记]Cisco PT VLANTrunk配置
    iptables感悟Ubuntu
    CentOS网络配置
    Discuz X2 数据库备份功能分析
  • 原文地址:https://www.cnblogs.com/joker1937/p/13081816.html
Copyright © 2011-2022 走看看