【改造后序遍历算法】124. 二叉树中的最大路径和

124. 二叉树中的最大路径和

解题思路

  • 改造后序遍历算法
  • 递归计算左子树的节点 的单侧路径和
  • 递归计算右子树的单侧路径和
  • 累加两侧的路径和 以及 节点的值
  • 更新最大路径和
  • 然后接着递归
/**
 * 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 {
    int res = Integer.MIN_VALUE;

    public int maxPathSum(TreeNode root) {

        if(root == null){
            return 0;
        }
        // 改造后序遍历算法
        oneSideMax(root);
        return res;
    }

    // 计算从根节点root为起点的最大单边路径和
    int oneSideMax(TreeNode root){
        if(root == null){
            return 0;
        }

        int leftMax = Math.max(0,oneSideMax(root.left));
        int rightMax = Math.max(0,oneSideMax(root.right));
        //后序遍历位置  顺便更新最大路径和
        
        // 这里计算的是两边节点的和
        int pathMaxSum = root.val + leftMax + rightMax;
        res = Math.max(pathMaxSum,res);

        return Math.max(leftMax,rightMax) + root.val;
    }
}


你可能感兴趣的:(#,Leetcode,算法)