124. 二叉树中的最大路径和/104. 二叉树的最大深度

我最想刷的递归又来啦,待我先去好好研究一下。

据说T124是T104的进阶,所以先去刷下104

104:

顶层: 即在真正的root节点上,我要返回的是一个数字,而且要比我的左右节点返回的深度大1

def maxDepth(self,root):

  return max(maxDepth(root.left)+1,maxDepth(root.right)+1)

底层:当遇到叶子节点时候,深度为1,其左右的None 深度为0,所以basecase 应该是叶子节点的再下一层,不要搞错了。

  if not root:

    return 0

124: 本题还行,只是求最大路径和,是一个数字,不像我们之前的assignment,直接求最大路径,那个时候的全球变量就要用一个list了

def maxDepth(self,root):

  #这里考虑到不一定要到根节点,所以定义了self.res,随时更新 left+right+self.val的值,最后取整个递归过程中最大的一条路径的和。

  self.res = float(‘-inf‘)

  def helper(root):

#底层: 如果递归到叶子节点的下一层,则返回None的val 0

    if not root:

      return 0

#顶层: 取 left,right,0中最大的那条路径 与 根节点的val相加,并上传路径

    left = max(helper(root.left),0)

    right = max(helper(root.right),0)

    self.res = max(self.res,left+right+root.val)

    return max(left,right) + root.val

  helper(root)

  return self.res

对比104与124:

  两道题底层都一样,都返回int :0

  顶层递归不一样,104中由于层数肯定大于0,只需要比较 left+1(本层val) 和 right+1(本层val)

          124中不仅要取 Left + root.val 和 right + root.val 还要保证 left 和 right >0

  124最后再通过一个 全局变量来取 整个递归过程中的 最大值, 全剧终。

原文地址:https://www.cnblogs.com/ChevisZhang/p/12236030.html

时间: 2024-08-11 14:29:43

124. 二叉树中的最大路径和/104. 二叉树的最大深度的相关文章

LeetCode(124):二叉树中的最大路径和

Hard! 题目描述: 给定一个非空二叉树,返回其最大路径和. 本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列.该路径至少包含一个节点,且不需要经过根节点. 示例 1: 输入: [1,2,3] 1 / 2 3 输出: 6 示例 2: 输入: [-10,9,20,null,null,15,7]   -10    /   9  20     /     15   7 输出: 42 解题思路: 这道求二叉树的最大路径和是一道蛮有难度的题,难就难在起始位置和结束位置可以为任意位置,像这种

[LeetCode] 124. 二叉树中的最大路径和

题目链接 : https://leetcode-cn.com/problems/binary-tree-maximum-path-sum/ 题目描述: 给定一个非空二叉树,返回其最大路径和. 本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列.该路径至少包含一个节点,且不一定经过根节点. 示例: 示例 1: 输入: [1,2,3] 1 / 2 3 输出: 6 示例 2: 输入: [-10,9,20,null,null,15,7] -10 / 9 20 / 15 7 输出: 42 思路

leetcode:124. 二叉树中的最大路径和

题目描述: 给定一个非空二叉树,返回其最大路径和. 本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列.该路径至少包含一个节点,且不一定经过根节点. 示例 1: 输入: [1,2,3] 1 / 2 3 输出: 6 示例 2: 输入: [-10,9,20,null,null,15,7]   -10    /   9  20     /     15   7 输出: 42 思路分析: 路径问题常规想到的就是用搜索解决.这道题用到了dfs,用递归完成.对于每个结点,计算其左右子树的贡献值,

图解leetcode —— 124. 二叉树中的最大路径和

前言: 每道题附带动态示意图,提供java.python两种语言答案,力求提供leetcode最优解. 描述: 给定一个非空二叉树,返回其最大路径和. 本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列.该路径至少包含一个节点,且不一定经过根节点. 示例 1: 输入: [1,2,3] 1 / \ 2 3 输出: 6 示例 2: 输入: [-10,9,20,null,null,15,7] -10   / \  9  20    /  \   15   7 输出: 42 思路: java

UVA 548.Tree-fgets()函数读入字符串+二叉树(中序+后序遍历还原二叉树)+DFS or BFS(二叉树路径最小值并且相同路径值叶子节点权值最小)

Tree UVA - 548 题意就是多次读入两个序列,第一个是中序遍历的,第二个是后序遍历的.还原二叉树,然后从根节点走到叶子节点,找路径权值和最小的,如果有相同权值的就找叶子节点权值最小的. 最后输出来叶子节点. 一开始写的时候是用gets读入的,报CE, 要用fgets写,关于fgets(),传送门: fgets函数及其用法,C语言fgets函数详解 一开始用bfs过的,后来发现,好多人都是dfs过的,又写了一下dfs... 代码: 1 //二叉树的中序和后序遍历还原树并输出最短路径的叶子

二叉树中的最大路径和

给出一棵二叉树,寻找一条路径使其路径和最大,路径可以在任一节点中开始和结束(路径和为两个节点之间所在路径上的节点权值之和) 样例 给出一棵二叉树: 1 / 2 3 返回 6 1 class Solution { 2 public: 3 /** 4 * @param root: The root of binary tree. 5 * @return: An integer 6 */ 7 struct ResultType { 8 int maxLength; 9 int maxSinglePat

二叉树中所有的路径(从根节点到叶子结点)

1 import java.util.ArrayList; 2 3 /** 4 * 寻找最短的二叉搜索的路径,从根节点到叶子结点 5 * 6 * @author jinfeng 7 * 8 */ 9 public class FindShortestBTPath { 10 11 // 用来记录所有的路径 12 private ArrayList<ArrayList<Integer>> allPaths = new ArrayList<ArrayList<Integer&

二叉树中的最大路径和 &#183; Binary Tree Maximum Path Sum

[抄题]: [思维问题]: [一句话思路]: 用两次分治. [输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况(不合法不合理的输入): [画图]: 先root-any左右各一次,再用any-any. [一刷]: [二刷]: [三刷]: [四刷]: [五刷]: [总结]: [复杂度]:Time complexity: O(n) Space complexity: O() [英文数据结构,为什么不用别的数据结构]: [其他解法]: 暴力解法 把所有路径找一遍:n^2 [Foll

二叉树的操作之统计二叉树中节点的个数

一,问题描述 给定一颗二叉树,已知其根结点. ①计算二叉树所有结点的个数 ②计算二叉树中叶子结点的个数 ③计算二叉树中满节点(度为2)的个数 二,算法分析 找出各个问题的基准条件,然后采用递归的方式实现. ①计算二叉树所有结点的个数 1)当树为空时,结点个数为0,否则为根节点个数 加上 根的左子树中节点个数 再加上 根的右子树中节点的个数 借助遍历二叉树的思路,每访问一个结点,计数增1.因此,可使用类似于先序遍历的思路来实现,代码如下: //计算树中节点个数 private int nubmer