zoukankan      html  css  js  c++  java
  • leetcode 113 路径总和II

    简介

    路径总和 思路 回溯.
    不推荐层次遍历, 代码比较复杂.

    code

    /**
     * Definition for a binary tree node.
     * struct TreeNode {
     *     int val;
     *     TreeNode *left;
     *     TreeNode *right;
     *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
     *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
     *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
     * };
     */
    class Solution {
    public:
        vector<vector<int>> res;
        int targetSum_;
        void dfs(vector<int> &path, int value, map<TreeNode*, bool>& visited, TreeNode * root){
            
            if(root->left == nullptr && root->right == nullptr && value == targetSum_){
                res.push_back(path);
            }
    
            if(root->left != nullptr && visited[root->left] == false) {
                path.push_back(root->left->val);
                value += root->left->val;
                visited[root->left] = true;
                dfs(path, value, visited, root->left);
                visited[root->left] = false;
                value -= root->left->val;
                path.pop_back();
            }
            if(root->right != nullptr && visited[root->right] == false){
                path.push_back(root->right->val);
                value += root->right->val;
                visited[root->right] = true;
                dfs(path, value, visited, root->right);
                visited[root->right] = false;
                value -= root->right->val;
                path.pop_back();
            }
        }
        vector<vector<int>> pathSum(TreeNode* root, int targetSum) {
            targetSum_ = targetSum;
            if(root == nullptr) return res;
            vector<int> path;
            map<TreeNode *, bool> visited;
            visited[root] = true;
            path.push_back(root->val);
            dfs(path, root->val, visited, root);
            return res;
    
        }
    };
    
    class Solution {
        List<List<Integer>> ret = new LinkedList<List<Integer>>();
        Map<TreeNode, TreeNode> map = new HashMap<TreeNode, TreeNode>();
    
        public List<List<Integer>> pathSum(TreeNode root, int sum) {
            if (root == null) {
                return ret;
            }
    
            Queue<TreeNode> queueNode = new LinkedList<TreeNode>();
            Queue<Integer> queueSum = new LinkedList<Integer>();
            queueNode.offer(root);
            queueSum.offer(0);
    
            while (!queueNode.isEmpty()) {
                TreeNode node = queueNode.poll();
                int rec = queueSum.poll() + node.val;
    
                if (node.left == null && node.right == null) {
                    if (rec == sum) {
                        getPath(node);
                    }
                } else {
                    if (node.left != null) {
                        map.put(node.left, node);
                        queueNode.offer(node.left);
                        queueSum.offer(rec);
                    }
                    if (node.right != null) {
                        map.put(node.right, node);
                        queueNode.offer(node.right);
                        queueSum.offer(rec);
                    }
                }
            }
    
            return ret;
        }
    
        public void getPath(TreeNode node) {
            List<Integer> temp = new LinkedList<Integer>();
            while (node != null) {
                temp.add(node.val);
                node = map.get(node);
            }
            Collections.reverse(temp);
            ret.add(new LinkedList<Integer>(temp));
        }
    }
    
    Hope is a good thing,maybe the best of things,and no good thing ever dies.----------- Andy Dufresne
  • 相关阅读:
    MySQL for Linux错误: ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
    Git SSH Key 生成步骤
    百度陆奇最新内部演讲:如何成为一个优秀的工程师?
    Apple使用Apache Mesos重建Siri后端服务
    剖析Elasticsearch集群系列第一篇 Elasticsearch的存储模型和读写操作
    ElasticSearch VS Solr
    聊聊基于Lucene的搜索引擎核心技术实践
    如何安全的存储用户密码?
    MySQL 性能管理及架构设计指南
    大牛是怎么思考设计MySQL优化方案
  • 原文地址:https://www.cnblogs.com/eat-too-much/p/14830310.html
Copyright © 2011-2022 走看看