• leetcode刷题11


    这是周六应该做的题,是LeetCode第124题。题目的要求是:给定一个二叉树,求出其二叉树上最大路径和,可以不经过根节点

    这个题到最后也没啥思路,于是借用了LeetCode官方解答的思路。

    具体地,是用递归,初始化 max_sum 为最小可能的整数并调用函数 max_gain(node = root)。

    实现 max_gain(node) 检查是继续旧路径还是开始新路径:

    边界情况:如果节点为空,那么最大权值是 0 。
    对该节点的所有孩子递归调用 max_gain,计算从左右子树的最大权值:left_gain = max(max_gain(node.left), 0) 和 right_gain = max(max_gain(node.right), 0)。
    检查是维护旧路径还是创建新路径。创建新路径的权值是:price_newpath = node.val + left_gain + right_gain,当新路径更好的时候更新 max_sum。
    对于递归返回的到当前节点的一条最大路径,计算结果为:node.val + max(left_gain, right_gain)

    代码如下:

    import LeetcodePart6.TreeNode;
    import sun.reflect.generics.tree.Tree;
    
    public class MaxPathSum_124 {
        int max_sum = Integer.MIN_VALUE;
        public int max_gain(TreeNode node){
            if (node == null) return 0;
            int left_gain = Math.max(max_gain(node.left), 0);
            int right_gain = Math.max(max_gain(node.right), 0);
            int price_newpath = node.val + left_gain + right_gain;
            max_sum = Math.max(max_sum, price_newpath);
            return node.val + Math.max(left_gain, right_gain);
        }
        public int maxPathSum(TreeNode root) {
            max_gain(root);
            return max_sum;
        }
    }
  • 相关阅读:
    Windows-Redis-x64-5.0.9【感谢大佬】
    Debezium初试
    一键结束进程
    Vscode自动刷新
    从零到一搭建一个jenkins+github持续构建平台
    git项目迁移
    AWS IoT 消息代理
    解析器:request.body、request.POST、request.data
    Unity程序员的Unreal 简明教程(二,模型与材质)
    Unity程序员的Unreal 简明教程(一、旋转的BOX)
  • 原文地址:https://www.cnblogs.com/cquer-xjtuer-lys/p/11377670.html
Copyright © 2020-2023  润新知