首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

二叉树中的最大路径和

思路 (递归,树的遍历) 路径 在这道题目中,路径是指从树中某个节点开始,沿着树中的边走,走到某个节点为止,路过的所有节点的集合。路径的权值和是指路径中所有节点的权值的总和。...用最高节点可以将整条路径分为两部分:从该节点向左子树延伸的路径,和从该节点向右子树延伸的部分。 如图所示: 我们可以递归遍历整棵树,递归时维护从每个子树从最高节点开始往下延伸的最大路径和。...对于每个子树的最高节点,递归计算完左右子树后,我们将左右子树维护的两条最大路径,和该点拼接起来,就可以得到以这个点为最高节点子树的最大路径。...(这条路径一定是:左子树路径->最高节点->右子树路径) 然后维护从这个点往下延伸的最大路径:从左右子树的路径中选择权值大的一条延伸即可。...(只能从左右子树之间选一条路径) 最后整颗树的最大路径和为: 根节点值+左子树最大路径和+右子树最大路径和,即left_max + right_max + root->val 注意: 如果某条路径之和小于

25930
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    golang刷leetcode 二叉树(3)二叉树路径和

    给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。 说明: 叶子节点是指没有子节点的节点。...示例: 给定如下二叉树,以及目标和 sum = 22, 5 / \ 4 8 / / \...解题思路: 1,对于二叉树类型题目一般都是递归解 2,递归有两种:自根向下和自叶子向上 3,对于相等类型题目和最大值题目解题思路相反,本题采用自根向下 /** * Definition for a binary...=sum } return hasPathSum(root.Left,sum-root.Val)||hasPathSum(root.Right,sum-root.Val) } 给定一个二叉树和一个目标和...,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。

    20920

    每日三题-二叉树的最大深度、二叉树中的最大路径和、路径总和III

    ‍个人主页: 才疏学浅的木子 ‍♂️ 本人也在学习阶段如若发现问题,请告知非常感谢 ‍♂️ 本文来自专栏: 算法 算法类型:Hot100题 ❤️ 支持我:点赞 收藏 关注 每日三题 二叉树的最大深度...二叉树中的最大路径和 路径总和III 补上11月12日的每日三题 二叉树的最大深度 解法一 递归 class Solution { public int maxDepth(TreeNode...root.left); int right = maxDepth(root.right); return Math.max(left,right)+1; } } 二叉树中的最大路径和...以cur节点为根节点得到最大(cur+left+right) 第二种情况:以parent为根节点得到最大(parent+cur+Math.max(left,right)) 这里只能取一边因为要构成路径...; //找右边 res+=sum(root.right,targetSum-root.val); return res; } } 解法二 前缀和

    33640

    LeetCode 实战:「图解」二叉树中的最大路径和

    题目描述 给定一个非空二叉树,返回其最大路径和。 本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径 至少包含一个节点 ,且不一定经过根节点。...: 6 示例 2: 输入: [-10,9,20,null,null,15,7] -10 / \ 9 20 / \ 15 7 输出: 42 题目分析 这是一道二叉树问题中比较难的题目...题目要求出一个二叉树的最大路径和,路径和就是把一条路径上面节点的值加起来,这一题的难点在于路径的方向不固定,只要是任意两点间的通路都算是有效路径。...表示左子树到 root 的最大和的路径,right 表示右子树到 root 的最大和的路径: root 和左右路径形成路径(left - root - right) root 和左路径形成路径(left...- root) root 和右路径形成路径(root - right) root 自成路径(root) 你可以看到这四种情况都会把当前节点考虑在内,我们可以更新这里的最大值。

    74230

    精读《算法题 - 二叉树中的最大路径和》

    今天我们看一道 leetcode hard 难度题目:二叉树中的最大路径和。 题目 二叉树中的 路径 被定义为一条节点序列,序列中每对相邻节点之间都存在一条边。...同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点,且不一定经过根节点。 路径和 是路径中各节点值的总和。 给你一个二叉树的根节点 root ,返回其 最大路径和 。...经过一番思考,二叉树点到点之间仅有唯一一条路径,如果我们能枚举计算经过每个点的所有可能路径的最大值,那么找到其中最大的就可以得到答案。但可惜的是,以 “点” 为变量没办法写转移方程。...也就是说,在计算最大路径和时(重要内容字体加粗!): 经过该点的最大路径和,要同时考虑该点 + 左右子树最大贡献,也就是此时路径会形成类似倒扣的 U 型。...讨论地址是:精读《算法 - 二叉树中的最大路径和》· Issue #504 · dt-fe/weekly 如果你想参与讨论,请 点击这里,每周都有新的主题,周末或周一发布。

    35440

    Leetcode No.124 二叉树中的最大路径和

    路径和 是路径中各节点值的总和。 给你一个二叉树的根节点 root ,返回其 最大路径和 。...示例 1: 输入:root = [1,2,3] 输出:6 解释:最优路径是 2 -> 1 -> 3 ,路径和为 2 + 1 + 3 = 6 示例 2: 输入:root = [-10,9,20...根据函数 maxGain 得到每个节点的最大贡献值之后,如何得到二叉树的最大路径和?...对于二叉树中的一个节点,该节点的最大路径和取决于该节点的值与该节点的左右子节点的最大贡献值,如果子节点的最大贡献值为正,则计入该节点的最大路径和,否则不计入该节点的最大路径和。...维护一个全局变量 maxSum 存储最大路径和,在递归过程中更新 maxSum 的值,最后得到的 maxSum 的值即为二叉树中的最大路径和。

    32420

    二叉树中的最大路径和

    1.递归法思路: 题目要求最大路径和,对于一个二叉树节点,是不是先计算左子树和右子树的最大路径和,然后加上自己的值,这样就得出新的最大路径和了?所以说这里其实可以套后序遍历模板框架。...//计算右边分支最大值,右边分支如果为负数还不如不选择 int right = max(0, sideMax(root->right)); //看是否需要更新当前二叉树的最大路径和...子树中的内部路径要包含根节点 由题意可知,最大路径和可能产生于局部子树中,如下图左一。所以每递归一个子树,都求一下当前子树内部的最大路径和,见下图右一,从中比较出最大的。...所以,一个子树内部的最大路径和 = 左子树提供的最大路径和 + 根节点值 + 右子树提供的最大路径和。...通过求出每个子树对外提供的最大路径和(return出来给父节点),从递归树底部向上,求出每个子树内部的最大路径和,后者是求解的目标,它的求解需要子树提供的值,理解清楚二者的关系。

    65430

    二叉树——112. 路径总和

    1 题目描述 给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。...方法一:广度优先搜索 首先我们可以想到使用广度优先搜索的方式,记录从根节点到当前节点的路径和,以防止重复计算。 这样我们使用两个队列,分别存储将要遍历的节点,以及根节点到这些节点的路径和即可。...方法二:递归 观察要求我们完成的函数,我们可以归纳出它的功能:询问是否存在从当前节点root到叶子节点的路径,满足其路径和为sum。...假定从根节点到当前节点的值之和为val ,我们可以将这个大问题转化为一个小问题:是否存在从当前节点的子节点到叶子的路径,满足其路径和为sum - va1 。...不难发现这满足递归的性质,若当前节点就是叶子节点,那么我们直接判断sum是否等于va1即可(因为路径和已经确定,就是当前节点的值,我们只需要判断该路径和是否满足条件)。

    29610
    领券