程序员

力扣 124 二叉树中的最大路径和

2020-09-01  本文已影响0人  zhaojinhui

题意:找出树的最大路径和

思路:后跟遍历树,获取当前子树的最大值,并用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;
    }
}
上一篇下一篇

猜你喜欢

热点阅读