zoukankan      html  css  js  c++  java
  • 【leetcode】Path Sum2

    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]
    ]
    

     解体思路:利用递归深度优先遍历,保存中间结果。

    /**
     * Definition for binary tree
     * struct TreeNode {
     *     int val;
     *     TreeNode *left;
     *     TreeNode *right;
     *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     * };
     */
    class Solution {
    public:
        vector<vector<int> > pathSum(TreeNode *root, int sum) {
            vector<vector<int> > result;
            vector<int> intermediate;
            dfs(root, sum, intermediate, result);
            return result;
        }
        
        void dfs(TreeNode *root, int gap, vector<int> &intermediate, 
                vector<vector<int> > &result){
            if(root == nullptr)
                return;
            intermediate.push_back(root->val);
            
            if(root->left == nullptr && root->right == nullptr){
                if(gap == root->val)
                    result.push_back(intermediate);
            }
            
            dfs(root->left, gap - root->val, intermediate, result);
            dfs(root->right, gap - root->val, intermediate, result);
            
            intermediate.pop_back();//弹出回退
        }
    };
     
  • 相关阅读:
    组件
    Django
    面向对象
    异常处理
    模块1
    Java中权限设置
    java反射机制
    JavaScript提高篇之面向对象之单利模式工厂模型构造函数原型链模式
    JavaScript提高篇之预解释作用域以及this原理及其应用
    js-引用类型-Array
  • 原文地址:https://www.cnblogs.com/zxy1992/p/4386852.html
Copyright © 2011-2022 走看看