力扣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;
    }
}
相关推荐
天才测试猿33 分钟前
Postman接口测试之postman设置接口关联,实现参数化
自动化测试·软件测试·python·测试工具·职场和发展·接口测试·postman
2401_876907521 小时前
IEC 61347-1:2015 灯控制装置安全标准详解
大数据·数据结构·人工智能·算法·安全·学习方法
T.Ree.1 小时前
【数据结构】_排序
数据结构·算法·排序算法·排序
二进制的Liao1 小时前
【数据分析】什么是鲁棒性?
运维·论文阅读·算法·数学建模·性能优化·线性回归·负载均衡
这儿有一堆花3 小时前
比特币:固若金汤的数字堡垒与它的四道防线
算法·区块链·哈希算法
客卿1233 小时前
力扣100-移动0
算法·leetcode·职场和发展
CM莫问6 小时前
<论文>(微软)WINA:用于加速大语言模型推理的权重感知神经元激活
人工智能·算法·语言模型·自然语言处理·大模型·推理加速
计信金边罗8 小时前
是否存在路径(FIFOBB算法)
算法·蓝桥杯·图论
MZWeiei8 小时前
KMP 算法中 next 数组的构建函数 get_next
算法·kmp
Fanxt_Ja9 小时前
【JVM】三色标记法原理
java·开发语言·jvm·算法