力扣0124——二叉树的最大路径和

二叉树的最大路径和

难度:困难

题目描述

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

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

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

示例1

输入: root = [1,2,3]
输出: 6

示例2

输入: root = [-10,9,20,null,null,15,7]
输出: 42

题解

因为每个节点只能遍历一次,所以当选择的根节点不为最顶层的节点的时候,叶子节点只能选择一个,可以利用回溯算法,将两个叶子节点其中的最大值(需要大于0)和当前节点的和与0进行比较的结果返回,回溯结束之后就可以得到最终结果

想法代码

csharp 复制代码
public class TreeNode
{
    public int val;
    public TreeNode left;
    public TreeNode right;
    public TreeNode(int val = 0, TreeNode left = null, TreeNode right = null)
    {
        this.val = val;
        this.left = left;
        this.right = right;
    }
}

public class Solution
{
    public static void Main(string[] args)
    {
        Solution solution = new Solution();
        TreeNode root = new TreeNode
        {
            val = -10,
            left = new TreeNode(9),
            right = new TreeNode
            {
                val = 20,
                left = new TreeNode(15),
                right = new TreeNode(7)
            }
        };
        int x = solution.MaxPathSum(root);
        Console.WriteLine(x);
    }

    public int ans = int.MinValue;

    public int MaxPathSum(TreeNode root)
    {
        BackTrack(root);
        return ans;
    }

    public int BackTrack(TreeNode root)
    {
        if (root == null)
        {
            return 0;
        }
        int left = BackTrack(root.left);
        int right = BackTrack(root.right);
        int current = Math.Max(0, left) + Math.Max(0, right) + root.val;
        ans = Math.Max(current, ans);
        return Math.Max(0, Math.Max(left, right)) + root.val;
    }
}
相关推荐
忍界英雄2 分钟前
LeetCode:2398. 预算内的最多机器人数目 双指针+单调队列,时间复杂度O(n)
算法·leetcode·机器人
Kenneth風车3 分钟前
【机器学习(五)】分类和回归任务-AdaBoost算法-Sentosa_DSML社区版
人工智能·算法·低代码·机器学习·数据分析
C7211BA21 分钟前
使用knn算法对iris数据集进行分类
算法·分类·数据挖掘
Tisfy23 分钟前
LeetCode 2398.预算内的最多机器人数目:滑动窗口+单调队列——思路清晰的一篇题解
算法·leetcode·机器人·题解·滑动窗口
.普通人25 分钟前
c语言--力扣简单题目(回文链表)讲解
c语言·leetcode·链表
程序猿练习生27 分钟前
C++速通LeetCode简单第18题-杨辉三角(全网唯一递归法)
c++·算法·leetcode
Huazzi.30 分钟前
算法题解:斐波那契数列(C语言)
c语言·开发语言·算法
汉字萌萌哒31 分钟前
【2022 CCF 非专业级别软件能力认证第一轮(CSP-J1)入门级 C++语言试题及解析】
数据结构·c++·算法
2301_8071805432 分钟前
icpc江西:L. campus(dij最短路)
算法
th新港33 分钟前
CCF201909_1
数据结构·c++·算法·ccf