zoukankan      html  css  js  c++  java
  • 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;
        }
    }
  • 相关阅读:
    全球化编码
    linuxGrep命令
    Xcode-插件所在路径
    多控制器间数据传递
    触摸事件
    IOS事件处理
    事件监听的三种方法
    UITabBarController
    聊天布局
    Info.plist:项目配置文件
  • 原文地址:https://www.cnblogs.com/cquer-xjtuer-lys/p/11377670.html
Copyright © 2011-2022 走看看