zoukankan      html  css  js  c++  java
  • LeetCode 124 二叉树最大路径和

    LeetCode 124 二叉树最大路径和

    问题描述:
    给定一个非空二叉树,返回其最大路径和。
    本题中,路径被定义为一条从树中任意节点出发,沿父节点-子节点连接,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。

    执行用时:1 ms, 在所有 Java 提交中击败了99.87%的用户
    内存消耗:41.7 MB, 在所有 Java 提交中击败了52.28%的用户

    递归: 后序遍历

    class Solution {
        int maxSum = Integer.MIN_VALUE;
    
        public int maxPathSum(TreeNode root) {
            maxGain(root);
            return maxSum;
        }
    
        public int maxGain(TreeNode node) {
            if (node == null) {
                return 0;
            }
            
            // 递归计算左右子节点的最大贡献值
            // 只有在最大贡献值大于 0 时,才会选取对应子节点
            int leftGain = Math.max(maxGain(node.left), 0);
            int rightGain = Math.max(maxGain(node.right), 0);
    
            // 节点的最大路径和取决于该节点的值与该节点的左右子节点的最大贡献值
            int priceNewpath = node.val + leftGain + rightGain;
    
            // 更新答案
            maxSum = Math.max(maxSum, priceNewpath);
    
            // 返回节点的最大贡献值
            return node.val + Math.max(leftGain, rightGain);
        }
    }
    
  • 相关阅读:
    无所不能的Ant 【转】
    fstream的文件操作
    dos下的for命令详解(zz)
    c++中vector的用法总结
    学习Git上
    IE下的document.onclick问题
    第一次面试实习感触
    大数据概述
    红旗
    词法分析
  • 原文地址:https://www.cnblogs.com/CodeSPA/p/13605968.html
Copyright © 2011-2022 走看看