zoukankan      html  css  js  c++  java
  • Leetcode 124. 二叉树中的最大路径和 dfs

    地址 https://leetcode-cn.com/problems/binary-tree-maximum-path-sum/

    路径 被定义为一条从树中任意节点出发,沿父节点-子节点连接,达到任意节点的序列。
    同一个节点在一条路径序列中 至多出现一次 。
    该路径 至少包含一个 节点,且不一定经过根节点。
    路径和 是路径中各节点值的总和。
    给你一个二叉树的根节点 root ,返回其 最大路径和 。
     
    示例 1:
    

    输入:root = [1,2,3]
    输出:6
    解释:最优路径是 2 -> 1 -> 3 ,路径和为 2 + 1 + 3 = 6
    
    示例 2:
    

    输入:root = [-10,9,20,null,null,15,7]
    输出:42
    解释:最优路径是 15 -> 20 -> 7 ,路径和为 15 + 20 + 7 = 42
    
    
    提示:
    树中节点数目范围是 [1, 3 * 104]
    -1000 <= Node.val <= 1000
    

    解答
    遍历二叉树
    首先获取每个节点中的最大值,这是答案的一种可能,情况1
    还有一种和就是左子树和加根节点解右子树的和,情况2
    还有一种就是选择左子树和加上根节点 或者右子树和加上根节点,选择和更大的组合,情况3

    /**
     * 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:
        int ans = -999999;
        int dfs(TreeNode* root){
            if(root==NULL) return 0;
    
            ans = max(ans,root->val);
    
            int lsum = dfs(root->left);
            int rsum = dfs(root->right);
    
            ans = max(ans,max(0,lsum)+root->val+max(0,rsum));
    
            return max(root->val+max(0,rsum),root->val+max(0,lsum));
        }
        int maxPathSum(TreeNode* root) {
            ans = max(ans,dfs(root));
            return ans;
        }
    };
    

    我的视频题解空间

    作 者: itdef
    欢迎转帖 请保持文本完整并注明出处
    技术博客 http://www.cnblogs.com/itdef/
    B站算法视频题解
    https://space.bilibili.com/18508846
    qq 151435887
    gitee https://gitee.com/def/
    欢迎c c++ 算法爱好者 windows驱动爱好者 服务器程序员沟通交流
    如果觉得不错,欢迎点赞,你的鼓励就是我的动力
    阿里打赏 微信打赏
  • 相关阅读:
    测试覆盖(率)到底有什么用?
    重构遗留程序的一次案例学习(java程序)
    rsync学习
    一次awk脚本的重构
    哪本书是对程序员最有影响、每个程序员都该阅读的书?
    我的阅读编程书籍的好方法
    领域驱动设计和实践
    不要if else的编程
    编码规范的要点
    最牛B的编码套路
  • 原文地址:https://www.cnblogs.com/itdef/p/14968091.html
Copyright © 2011-2022 走看看