注意:

// 注意,如果一个类放在另一个类里面,初始化时候会报错 Solution is not a enclosing class
// 这是因为如果TreeNode不是static,那么要求先有外部类的实例
// 要加上static
// 或者放到类的外面
https://leetcode.com/problems/binary-tree-maximum-path-sum/
https://leetcode.com/mockinterview/session/result/xslp8c2/
package com.company; import java.util.ArrayList;
import java.util.List; class Solution { // 注意,如果放在Solution里面,会报错 Solution is not a enclosing class
// 这是因为如果TreeNode不是static,那么要求先有外部类的实例
// 要加上static
static class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x; }
} public int maxPathSum(TreeNode root) {
// 要求至少有一个元素,全是负数情况下不能认为是0
if (root == null) {
return 0;
}
List<Integer> ret = impl(root);
return ret.get(1);
} // 多值返回一般放在容器里
// [0]包含root的单一路径最大值; [1] 最大值;
// 调用时保证root不会为null
private List<Integer> impl(TreeNode root) {
List<Integer> ret = new ArrayList();
int maxWithRoot = root.val;
int maxRet = root.val; if (root.left != null) {
List<Integer> left = impl(root.left);
System.out.printf("Here is left %d, ret: %d, %d\n", root.left.val, left.get(0), left.get(1));
if (left.get(0) > 0) {
maxWithRoot = root.val + left.get(0);
}
maxRet = maxWithRoot > left.get(1) ? maxWithRoot : left.get(1); }
if (root.right != null) {
List<Integer> right = impl(root.right);
int tmp = maxWithRoot;
if (root.val + right.get(0) > maxWithRoot) {
maxWithRoot = root.val + right.get(0);
}
// 下面这个地方因为考虑不周,导致了一个bug,只考虑了maxWithRoot,没有考虑之前的maxRet
maxRet = maxWithRoot > maxRet ? maxWithRoot : maxRet;
maxRet = maxRet > right.get(1) ? maxRet : right.get(1); // merge two branch
if (tmp + right.get(0) > maxRet) {
maxRet = tmp + right.get(0);
}
} ret.add(maxWithRoot);
ret.add(maxRet);
System.out.printf("Here is node %d, ret: %d, %d\n", root.val, maxWithRoot, maxRet);
return ret;
}
} public class Main { public static void main(String[] args) {
// write your code here
System.out.println("Hello"); Solution.TreeNode node1 = new Solution.TreeNode(1);
Solution.TreeNode node2 = new Solution.TreeNode(2);
Solution.TreeNode node3 = new Solution.TreeNode(3);
Solution.TreeNode node4 = new Solution.TreeNode(4);
Solution.TreeNode node5 = new Solution.TreeNode(5);
Solution.TreeNode node6 = new Solution.TreeNode(6);
Solution.TreeNode node7 = new Solution.TreeNode(7);
Solution.TreeNode node8 = new Solution.TreeNode(8);
Solution.TreeNode node9 = new Solution.TreeNode(9);
Solution.TreeNode node10 = new Solution.TreeNode(10);
node1.left = node2;
node1.right = node3;
node2.left = node4;
node2.right = node5;
node3.left = node6;
node3.right = node7;
node4.left = node8;
node4.right = node9;
node5.left = node10; Solution solution = new Solution();
int ret = solution.maxPathSum(node1);
System.out.printf("Get ret: %d\n", ret); }
}

binary-tree-maximum-path-sum(mock)的更多相关文章

  1. [leetcode]Binary Tree Maximum Path Sum

    Binary Tree Maximum Path Sum Given a binary tree, find the maximum path sum. The path may start and ...

  2. 【leetcode】Binary Tree Maximum Path Sum

    Binary Tree Maximum Path Sum Given a binary tree, find the maximum path sum. The path may start and ...

  3. 26. Binary Tree Maximum Path Sum

    Binary Tree Maximum Path Sum Given a binary tree, find the maximum path sum. The path may start and ...

  4. leetcode 124. Binary Tree Maximum Path Sum 、543. Diameter of Binary Tree(直径)

    124. Binary Tree Maximum Path Sum https://www.cnblogs.com/grandyang/p/4280120.html 如果你要计算加上当前节点的最大pa ...

  5. LeetCode: Binary Tree Maximum Path Sum 解题报告

    Binary Tree Maximum Path SumGiven a binary tree, find the maximum path sum. The path may start and e ...

  6. 【LeetCode】124. Binary Tree Maximum Path Sum

    Binary Tree Maximum Path Sum Given a binary tree, find the maximum path sum. The path may start and ...

  7. 二叉树系列 - 二叉树里的最长路径 例 [LeetCode] Binary Tree Maximum Path Sum

    题目: Binary Tree Maximum Path Sum Given a binary tree, find the maximum path sum. The path may start ...

  8. 第四周 Leetcode 124. Binary Tree Maximum Path Sum (HARD)

    124. Binary Tree Maximum Path Sum 题意:给定一个二叉树,每个节点有一个权值,寻找任意一个路径,使得权值和最大,只需返回权值和. 思路:对于每一个节点 首先考虑以这个节 ...

  9. [LeetCode] 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. ...

  10. LeetCode(124) Binary Tree Maximum Path Sum

    题目 Given a binary tree, find the maximum path sum. For this problem, a path is defined as any sequen ...

随机推荐

  1. DSP中的cmd文件

    一.CMD文件 链接命令文件(Link Command Files),以后缀.cmd结尾,简称CMD文件. CMD文件的两大功能是指示存储空间和分配段到存储空间. 在编写CMD文件时,主要采用MEMO ...

  2. 用于主题检测的临时日志(b42e98ba-eb4f-4099-a54c-7aee3f29c3dd - 3bfe001a-32de-4114-a6b4-4005b770f6d7)

    这是一个未删除的临时日志.请手动删除它.(184c28c9-c88e-48fe-9713-6891e2d15044 - 3bfe001a-32de-4114-a6b4-4005b770f6d7)

  3. Selenium中expected_conditions下text_to_be_present_in_element_value方法的使用

    text_to_be_present_in_element: 判断某个元素中的text是否包含了预期的字符串 text_to_be_present_in_element_value: 判断某个元素中的 ...

  4. POJ 1573

    #include<iostream> #include<stdio.h> #define MAXN 15 using namespace std; char _m[MAXN][ ...

  5. Java集合框架(三)

     Map Map集合:该集合存储键值对,一对一对的往里存,而且要保证键的唯一性. Map |------HashTable:底层是哈希表数据结构,不可以存入null键null值.该集合是线程同步的.J ...

  6. 【转载】 硬盘主引导记录(MBR)及其结构详解

    硬盘的0柱面.0磁头.1扇区称为主引导扇区,FDISK程序写到该扇区的内容称为主引导记录(MBR).该记录占用512个字节,它用于硬盘启动时将系统控制权交给用户指定的,并在分区表中登记了的某个操作系统 ...

  7. SSH开发实践part2:双向1-N连接配置

    1 OK,上一篇已经介绍了项目开发的前期准备工作,具体内容可以参考:http://www.cnblogs.com/souvenir/p/3783686.html 按照开发步骤,我们现在已经可以开始进行 ...

  8. lintcode:最小差

    最小差 给定两个整数数组(第一个是数组 A,第二个是数组 B),在数组 A 中取 A[i],数组 B 中取 B[j],A[i] 和 B[j]两者的差越小越好(|A[i] - B[j]|).返回最小差. ...

  9. 2011 ACM-ICPC 成都赛区解题报告(转)

    2011 ACM-ICPC 成都赛区解题报告 首先对F题出了陈题表示万分抱歉,我们都没注意到在2009哈尔滨赛区曾出过一模一样的题.其他的话,这套题还是非常不错的,除C之外的9道题都有队伍AC,最终冠 ...

  10. RTP-实时协议

    RTP,实时协议被用来为应用程序如音频,视频等的实时数据的传输提供端到端(end to end)的网络传输功能.传输的模型可以是单点传送或是多点传送.数据传输被一个姐妹协议——实时控制协议(RTCP) ...