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

简介: 二叉树中的 路径 被定义为一条节点序列,序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点,且不一定经过根节点。路径和 是路径中各节点值的总和。给你一个二叉树的根节点 root ,返回其 最大路径和 。

 题目

二叉树中的 路径 被定义为一条节点序列,序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点,且不一定经过根节点。

路径和 是路径中各节点值的总和。

给你一个二叉树的根节点 root ,返回其 最大路径和

解题思路

    1. 对树进行递归;
    2. 左右子树加上当前节点与当前结果相比取最大值(从下往上归);
    3. 向上返回只能保留左右子树中的一个,否则会无法形成一条链。

    代码展示

    class Solution {
        private int ans = Integer.MIN_VALUE;
        public int maxPathSum(TreeNode root) {
            dfs(root);
            return ans;
        }
        private int dfs(TreeNode root){
            if(root == null){
                return 0;
            }
            int left = dfs(root.left);
            int right = dfs(root.right);
            ans = Math.max(ans,left + right + root.val);
            return Math.max(Math.max(left,right) + root.val, 0);    //当前最大值
        }
    }

    image.gif


    目录
    相关文章
    |
    6天前
    |
    存储 Java
    ZigZagging on a Tree二叉树蛇形层次遍历(Java语言)
    ZigZagging on a Tree二叉树蛇形层次遍历(Java语言)
    11 1
    |
    6天前
    |
    Java
    Tree Traversals Again(Java语言)(先序和中序创建二叉树)(遍历树)
    Tree Traversals Again(Java语言)(先序和中序创建二叉树)(遍历树)
    13 4
    |
    6天前
    leetcode代码记录(二叉树的所有路径
    leetcode代码记录(二叉树的所有路径
    12 0
    |
    1天前
    |
    算法
    数据结构与算法⑮(第四章_下)二叉树OJ(力扣:144,965,104,110,226,100,101,572)(下)
    数据结构与算法⑮(第四章_下)二叉树OJ(力扣:144,965,104,110,226,100,101,572)
    7 1
    |
    1天前
    |
    算法 C++
    数据结构与算法⑮(第四章_下)二叉树OJ(力扣:144,965,104,110,226,100,101,572)(上)
    数据结构与算法⑮(第四章_下)二叉树OJ(力扣:144,965,104,110,226,100,101,572)
    7 1
    |
    6天前
    leetcode代码记录(对称二叉树 中序遍历+回文串 为什么不行
    leetcode代码记录(对称二叉树 中序遍历+回文串 为什么不行
    8 0
    |
    6天前
    leetcode代码记录(二叉树的最小深度
    leetcode代码记录(二叉树的最小深度
    10 0
    |
    6天前
    leetcode代码记录(二叉树的最大深度
    leetcode代码记录(二叉树的最大深度
    9 0
    |
    6天前
    leetcode代码记录(翻转二叉树
    leetcode代码记录(翻转二叉树
    8 0
    |
    6天前
    leetcode代码记录(二叉树的层序遍历
    leetcode代码记录(二叉树的层序遍历
    12 0