题意:找出树的最大路径和
思路:后跟遍历树,获取当前子树的最大值,并用max记录最终结果
思想:后跟遍历
复杂度:时间O(n2),空间O(n)
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
// 最后的结果
long max = (long)Integer.MIN_VALUE - 1;
public int maxPathSum(TreeNode root) {
long temp = getSubTreeMax(root);
return (int)Math.max(max, temp);
}
long getSubTreeMax(TreeNode root) {
// 叶节点返回0
if(root == null)
return 0;
// 获取最大的左子树值
long left = getSubTreeMax(root.left);
// 获取最大的右子树值
long right = getSubTreeMax(root.right);
// 比较当前节点,当前节点+最大左子树值和当前节点+最大右子树值,获取当前最大子树值
long temp = Math.max(left+root.val, Math.max(right+root.val, root.val));
// 比较已知最大值,最大子树值和左右子树+当前值,记录当前可能的最大值
max = Math.max(Math.max(left+right+root.val, temp), max);
return temp;
}
}
网友评论