提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档
题目列表
【第1题】二叉树中的最大路径和
LeetCode地址:https://leetcode.cn/problems/binary-tree-maximum-path-sum/
1.题目描述
2.解题思路
3.代码详解
class Solution {
public int maxPathSum(TreeNode root) {
if(root == null){
return 0;
}
return process(root).maxPathValue;
}
public Info process(TreeNode node){
if(node == null){
return null;
}
Info leftInfo = process(node.left);
Info rightInfo = process(node.right);
int maxPathValue = node.val;
int maxPathValueFromHead = node.val;
//分情况讨论
//1)必须有x
//往左扎
if(leftInfo != null){
maxPathValueFromHead = Math.max(maxPathValueFromHead,node.val + leftInfo.maxPathValueFromHead);
}
//往右扎
if(rightInfo != null){
maxPathValueFromHead = Math.max(maxPathValueFromHead,node.val + rightInfo.maxPathValueFromHead);
}
//2)一定没有x
//往左扎
if(leftInfo != null){
maxPathValue = Math.max(maxPathValue,leftInfo.maxPathValue);
}
//往右扎
if(rightInfo != null){
maxPathValue = Math.max(maxPathValue,rightInfo.maxPathValue);
}
// maxPathSum 是
maxPathValue = Math.max(maxPathValue,maxPathValueFromHead);
//3)全局最大路径和
if(leftInfo != null && rightInfo != null && rightInfo.maxPathValueFromHead > 0 && leftInfo.maxPathValueFromHead > 0){
maxPathValue = Math.max(maxPathValue,node.val + leftInfo.maxPathValueFromHead + rightInfo.maxPathValueFromHead);
}
return new Info(maxPathValue,maxPathValueFromHead);
}
class Info{
public int maxPathValue;
public int maxPathValueFromHead;
public Info(int maxPathValue,int maxPathValueFromHead){
this.maxPathValue = maxPathValue;
this.maxPathValueFromHead = maxPathValueFromHead;
}
}
}