首页 > 其他分享 >力扣124. 二叉树中的最大路径和

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

时间:2023-05-11 18:23:47浏览次数:45  
标签:right TreeNode int max 路径 力扣 124 二叉树 root

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

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

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

 

示例 1:

输入:root = [1,2,3]
输出:6
解释:最优路径是 2 -> 1 -> 3 ,路径和为 2 + 1 + 3 = 6

 

示例 2:

输入:root = [-10,9,20,null,null,15,7]
输出:42
解释:最优路径是 15 -> 20 -> 7 ,路径和为 15 + 20 + 7 = 42

 

 

提示:

  • 树中节点数目范围是 [1, 3 * 104]
  • -1000 <= Node.val <= 1000

 

自己水平不够,回溯的不好代码写的乱且挂用例,看了官方题解恍然大悟。不过官方题解里的最大贡献值和最大路径值容易混淆,我的理解是最大贡献值是x节点可以提供的以x为终点的路径的最大值。

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:

    int mmax=-1005;
    int getMaxGain(TreeNode *root){
        if (root==NULL){
            return 0;
        }
        int lchild_max=max(getMaxGain(root->left),0);  //和0的比较很关键,很容易挂在这里
        int rchild_max=max(getMaxGain(root->right),0);

        mmax=max(mmax,lchild_max+rchild_max+root->val);
        return max(lchild_max,rchild_max)+root->val;
    }
    int maxPathSum(TreeNode* root) {
        getMaxGain(root);
        return mmax;
    }
};

 

标签:right,TreeNode,int,max,路径,力扣,124,二叉树,root
From: https://www.cnblogs.com/coderhrz/p/17391870.html

相关文章

  • 2023-05-10:给你一棵以 root 为根的二叉树和一个 head 为第一个节点的链表 如果在二叉
    2023-05-10:给你一棵以root为根的二叉树和一个head为第一个节点的链表如果在二叉树中,存在一条一直向下的路径且每个点的数值恰好一一对应以head为首的链表中每个节点的值,那么请你返回True否则返回False。一直向下的路径的意思是:从树中某个节点开始,一直连续向下的路径......
  • 学校的数据结构实验_二叉树c语言实现
    二叉树的实现包括二叉树的构建,和二叉树的前中后序便利,二叉树的层序非递归遍历,求二叉树的总结点,求二叉树的最大深度和求二叉树的最大宽度,因为实验主要是对二叉树的各个属性数据测量,所以这里手动链接了一颗二叉树.随后用调用函数接口传参二叉树的根节点测量二叉树的属性.递......
  • 968. 监控二叉树
    给定一个二叉树,我们在树的节点上安装摄像头。节点上的每个摄影头都可以监视其父对象、自身及其直接子对象。计算监控树的所有节点所需的最小摄像头数量。示例1:输入:[0,0,null,0,0]输出:1解释:如图所示,一台摄像头足以监控所有节点。我的解法classSolution{private:......
  • 线索化二叉树
    线索化二叉树1.问题分析当对上面的二叉树进行中序遍历时,序列应为:[8,3,10,1,14,6];但存在一个问题也即,编号为6,8,10,14的几个节点的左右指针并没有完全利用上;如果希望利用到各个节点的左右指针,让各个节点可以指向自己的前后节点,即使用线索化二叉树。2.线索化二叉树基本介绍......
  • 5-9打卡:力扣19. 删除链表的倒数第 N 个结点
    给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 示例1:输入:head=[1,2,3,4,5],n=2输出:[1,2,3,5]示例2:输入:head=[1],n=1输出:[]示例3:输入:head=[1,2],n=1输出:[1] 提示:链表中结点的数目为sz1<=sz<=300<=Node.val<=1001<=n<=sz......
  • 力扣 724. 寻找数组的中心下标 --python
    给你一个整数数组 nums,请计算数组的中心下标。数组中心下标是数组的一个下标,其左侧所有元素相加的和等于右侧所有元素相加的和。如果中心下标位于数组最左端,那么左侧数之和视为0,因为在下标的左侧不存在元素。这一点对于中心下标位于数组最右端同样适用。如果数组有多个......
  • 二叉树
    相关知识点:结点拥有的子树数称为结点的度树的度是树内各结点度的最大值树中结点的最大层数称为树的高度或深度 根结点:无双亲,唯一叶结点:无孩子,可以多个中间结点:一个双亲多个孩子 二叉树的特点:每个结点最多有两棵子树左子树和右子树是由顺序的特殊二叉树:斜树,每......
  • 顺序存储二叉树
    顺序存储二叉树1.介绍从数据存储来看,数组的存储方式和树的存储方式是可以互相转换的,即数组可以转换成树,树也可以转换成数组;遍历数组arr时,仍然可以以前序遍历、中序遍历、后序遍历的方式得到二叉树。2.顺序存储二叉树的特点顺序存储二叉树通常只考虑完全二叉树;下标为......
  • 二叉树
    树是有限个(n>0)元素组成的集合。树中每个结点拥有的孩子结点的个数称为该结点的度,度为0的结点为叶子结点或终端结点。树的度是树中结点的度的最大值。在有序树中,孩子结点沿用左边大、右边小的原则。二叉树是有限个(n>=0)结点的集合。可以为空,或者有一个结点作为根结点,其他结点......
  • 二叉树的线索化与遍历
    废话不说,上代码l1packagedataSrtuct.TreeAlgorithm;23importcom.sun.source.tree.Tree;45publicclassThreadBinaryTree{6publicstaticvoidmain(String[]args){7TreeNode2root=newTreeNode2(1,"M");8......