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

二叉树的最大路径和

难度:困难

题目描述

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

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

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

示例1

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

示例2

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

题解

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

想法代码

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;
    }
}

相关推荐

  1. 0124——路径

    2024-02-10 07:36:04       51 阅读
  2. 124. 路径

    2024-02-10 07:36:04       52 阅读
  3. [ Hot100]Day50 路径

    2024-02-10 07:36:04       42 阅读
  4. 简洁易懂递归 | 124.路径

    2024-02-10 07:36:04       30 阅读
  5. -

    2024-02-10 07:36:04       28 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-10 07:36:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-10 07:36:04       101 阅读
  3. 在Django里面运行非项目文件

    2024-02-10 07:36:04       82 阅读
  4. Python语言-面向对象

    2024-02-10 07:36:04       91 阅读

热门阅读

  1. 算法刷题day10

    2024-02-10 07:36:04       47 阅读
  2. STL - 容器适配器

    2024-02-10 07:36:04       52 阅读
  3. 数据分类分级

    2024-02-10 07:36:04       44 阅读
  4. (52)只出现一次的数字III

    2024-02-10 07:36:04       58 阅读
  5. 深入解析 Spring 和 Spring Boot 的区别

    2024-02-10 07:36:04       55 阅读
  6. 浅聊一下redis的雪崩,穿透和击穿

    2024-02-10 07:36:04       52 阅读
  7. 数据结构——5.3 二叉树的遍历和线索二叉树

    2024-02-10 07:36:04       44 阅读
  8. 千里马平台设计说明-字典缓存

    2024-02-10 07:36:04       49 阅读