目录

力扣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;
    }
}
本文是转载文章,点击查看原文
如有侵权,请联系 xyy@jishuzhan.net 删除
相关推荐
序属秋秋秋几秒前
算法基础_基础算法【位运算 + 离散化 + 区间合并】
c语言·c++·学习·算法·蓝桥杯
Phoebe鑫6 分钟前
数据结构每日一题day10(链表)★★★★★
算法
jyyyx的算法博客13 分钟前
【再探图论】深入理解图论经典算法
c++·算法·图论
念_ovo20 分钟前
【算法/c++】利用中序遍历和后序遍历建二叉树
数据结构·c++·算法
梭七y22 分钟前
【力扣hot100题】(048)二叉树的最近公共祖先
算法·leetcode·职场和发展
luckyme_26 分钟前
leetcode-代码随想录-链表-移除链表元素
算法·leetcode·链表
Vitalia28 分钟前
⭐算法OJ⭐寻找最短超串【动态规划 + 状态压缩】(C++ 实现)Find the Shortest Superstring
开发语言·c++·算法·动态规划·动态压缩
_安晓33 分钟前
数据结构 -- 图的存储
数据结构·算法
C-DHEnry1 小时前
迪杰斯特拉+二分+优先队列+拓扑+堆优化(奶牛航线Cowroute、架设电话线dd、路障Roadblocks、奶牛交通Traffic)
c++·算法·动态规划·二分·拓扑·堆优化·迪杰斯特拉
.YY001.1 小时前
数据结构第一轮复习--第六章图包含代码
数据结构·算法