zoukankan      html  css  js  c++  java
  • LeetCode124:Binary Tree Maximum Path Sum

    题目:

    Given a binary tree, find the maximum path sum.

    The path may start and end at any node in the tree.

    For example:
    Given the below binary tree,

           1
          / 
         2   3

    Return 6.

    解题思路:

    最长路径和要分几种情况考虑,对于这样一个节点

           cur
          /    
        left  right

    设left是左子树的最长路径和,right是右子树的最长路径和,要求当前节点的最长路径和,只要将1、当前节点的val值2、当前节点val值加上left 3、当前节点val值加上rihgt,取其最大者作为当前节点的最长路径和。

    以上我们只是考虑了三种情况,1、最长路径是从cur节点开始;2、最长路径从左边上来经过cur;3、最长路径从右边上来经过cur

    还有三种情况需要考虑,1、如果left值是最长路径呢,即最长路径不经过cur,到left就为止了;2、如果right值是最长路径呢?3、最长路径经过cur,但是没有向上走,而是向另一个分支去了呢(left or right)?

    所以我们需要定义一个全局参数,求出left,right,及left+right+cur值的最大值,最后与递归结束后过根节点的最长路径长度比较,取其大者为此题答案。

    实现代码:

    class Solution {
    public:
        int maxPathSum(TreeNode *root) {
            if(root == NULL)
                return 0;
            int maxsum = INT_MIN;
            int ret = getMax(root, maxsum);
            return max(ret, maxsum);
            
        }
        
        int getMax(TreeNode *root, int &maxsum)
        {
            if(root == NULL)
                return INT_MIN>>4;
            int leftmax = getMax(root->left, maxsum);
            int rightmax = getMax(root->right, maxsum);
            maxsum = max(maxsum, max(max(leftmax, rightmax), leftmax + root->val + rightmax));
            return max(root->val, max(leftmax, rightmax) + root->val);
            
            
        }
    };
  • 相关阅读:
    Exceptionless in Docker on Linux 搭建及部署疑难杂症
    Golang 基础语法介绍及对比(二)
    Go Windows 环境安装及配置(一)
    ElasticSearch搜索解析
    ElasticSearch文档及分布式文档存储
    ElasticSearch利用IK实现全文搜索
    ElasticSearch简要总览
    轻松驾驭统计学——数据分析必备技能
    【面试】数据分析常见问题
    【Echarts】
  • 原文地址:https://www.cnblogs.com/mickole/p/3755631.html
Copyright © 2011-2022 走看看