zoukankan      html  css  js  c++  java
  • 二叉树的最大路径和

    给定一个二叉树,请计算节点值之和最大的路径的节点值之和是多少。这个路径的开始节点和结束节点可以是二叉树中的任意节点。例如:给出以下的二叉树,
    img
    返回的结果为6。

    private int res = Integer.MIN_VALUE;
    public int maxPathSum (TreeNode root) {
        // write code here
    
        if (root == null){
            return 0;
        }
    
        if (root.left == null && root.right == null){
            return root.val;
        }
    
        findPathSum(root);
        return res;
    
    }
    //函数的返回值定义为以自己为根的一条从根到子结点的最长路径
    //这个返回值是为了提供给它的父结点计算自身的最长路径用,这样一来,一个结点自身的最长路径就是它的左子树返回值(如果大于0的话),
    //加上右子树的返回值(如果大于0的话),再加上自己的值。
    //因为返回值只取一支路径的和,所以findPathSum返回值则是自己的值或者自己的值加上左子树返回值或者自己的值加上右子树返回值
    private int findPathSum(TreeNode root){
    
        if (root == null){
            return 0;
        }
    
        int sum = root.val;
        int leftSum = findPathSum(root.left);
        int rightSum = findPathSum(root.right);
    
        if (leftSum > 0)
            sum += leftSum;
    
        if (rightSum > 0){
            sum += rightSum;
        }
    
        res = Math.max(res,sum);
    
        return Math.max(root.val,Math.max(rightSum,leftSum)+root.val);
    }
    
  • 相关阅读:
    uu 模块
    程序员都是好男人
    TCP基础知识
    最全 git 命令总结
    iOS 添加UIWindow不显示问题解决
    解决CFBundleIdentifier", Does Not Exist
    Mac 系统OS X>=10.9,怎么把默认的python切换成3.7或者更高
    OC算法练习-Hash算法
    设计模式架构模式
    runtime相关知识
  • 原文地址:https://www.cnblogs.com/yxym2016/p/14642203.html
Copyright © 2011-2022 走看看