zoukankan      html  css  js  c++  java
  • LeetCode OJ:Path Sum II(路径和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,4,5]
    ]

    求路径的和与某一特定的值时候对等即可,简单的dfs,代码如下:

     1 class Solution {
     2 public:
     3     vector<vector<int>> pathSum(TreeNode* root, int sum) {
     4         vector<int> res;
     5         dfs(root, res, sum);
     6         return ret;
     7     }
     8 
     9     void dfs(TreeNode * root, vector<int> res, int left)
    10     {
    11         if(!root) return;
    12         if(!root->left && !root->right && left == root->val){
    13             res.push_back(root->val);
    14             ret.push_back(res);
    15         }
    16         if(left <= root->val)
    17             return;
    18         else{
    19             res.push_back(root->val);
    20             if(root->left)
    21                 dfs(root->left, res, left -= root->val);
    22             if(root->right)
    23                 dfs(root->right, res, left -= root->val);
    24         }
    25     }
    26 private:
    27     vector<vector<int>> ret;
    28 };

     java版本代码如下,方法相同,就是java的引用处理起来稍微麻烦点,递归尾部应该pop一下。

     1 public class Solution {
     2     public List<List<Integer>> pathSum(TreeNode root, int sum) {
     3         List<List<Integer>> ret = new ArrayList<List<Integer>>();
     4         Stack<Integer> tmp = new Stack<Integer>();
     5            dfs(ret, tmp, root, sum);
     6            return ret;
     7     }
     8 
     9     public void dfs(List<List<Integer>> ret, Stack<Integer> tmp, TreeNode root, int remain){
    10         if(root == null) return;
    11         tmp.push(root.val);
    12         if(root.left == null && root.right == null)
    13             if(remain == root.val)
    14                 ret.add((Stack<Integer>)tmp.clone());
    15         if(root.left != null) dfs(ret, tmp, root.left, remain - root.val);
    16         if(root.right != null) dfs(ret, tmp, root.right, remain - root.val);
    17         tmp.pop();
    19     }
    20 }
  • 相关阅读:
    c#_表单处理方式
    C#_在.net中序列化读写xml方法的总结
    Jquery_异步上传文件多种方式归纳
    C#_Jquery无刷新上传
    构造方法的作用
    ssh项目问题01,为创建数据库抛出的异常
    成员方法的使用及其调用
    静态页面的使用和操作
    oa项目环境搭建的操作步骤详解
    写做顺序
  • 原文地址:https://www.cnblogs.com/-wang-cheng/p/4912308.html
Copyright © 2011-2022 走看看