Leetcode:124. 二叉树中的最大路径和

Leetcode:124. 二叉树中的最大路径和

题目描述

给定一个非空二叉树,返回其最大路径和。

本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。

示例 1:

输入: [1,2,3]

    1
    / \
    2   3

输出: 6

示例 2:

输入: [-10,9,20,null,null,15,7]

   -10
   / \
  9  20
    /  \
   15   7

输出: 42

思路

思路1

后序遍历递归实现,最大路径只能为node+left son + right son或node + left son + node的父节点或node + right son + 父节点,所以在具体实现中后序遍历二叉数,并分别计算比较这三个值即可,递归得到以left son为最高节点的最大路径和right son为最高节点的路径和

代码

代码1

class Solution {
    private int result = Integer.MIN_VALUE;
    
    public int maxPathSum(TreeNode root) {
        maxPathCount(root);
        return result;
    }
    
    private int maxPathCount(TreeNode node){
        if (node == null){
            return 0;
        }
        
        int leftSum = Math.max(maxPathCount(node.left), 0);
        int rightSum = Math.max(maxPathCount(node.right), 0);
        
        int newSum = node.val + leftSum + rightSum;
        result = Math.max(result, newSum);
        
        return node.val + Math.max(leftSum, rightSum);
    }
}

复杂度分析

思路1时间复杂度

$O(n)$

思路1空间复杂度

$O(logn)$


文章作者: 小风雷
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 小风雷 !
评论
 上一篇
Leetcode:128. 最长连续序列 Leetcode:128. 最长连续序列
Leetcode:128. 最长连续序列题目描述给定一个未排序的整数数组,找出最长连续序列的长度。 要求算法的时间复杂度为 O(n)。 示例:输入: [100, 4, 200, 1, 3, 2] 输出: 4 解释: 最长连续序列是 [1
2020-04-22
下一篇 
Leetcode:395. 至少有K个重复字符的最长子串 Leetcode:395. 至少有K个重复字符的最长子串
Leetcode:395. 至少有K个重复字符的最长子串题目描述找到给定字符串(由小写字符组成)中的最长子串 T , 要求 T 中的每一字符出现次数都不少于 k 。输出 T 的长度。 示例 1:输入: s = "aaabb&qu
2020-04-21
  目录