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

Posted cheviszhang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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最后再通过一个 全局变量来取 整个递归过程中的 最大值, 全剧终。

 

以上是关于124. 二叉树中的最大路径和/104. 二叉树的最大深度的主要内容,如果未能解决你的问题,请参考以下文章

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

LeetCode Java刷题笔记—124. 二叉树中的最大路径和

LeetCode124二叉树中的最大路径和

微软面试题: LeetCode 543. 二叉树的直径出现次数:3

124. 二叉树中的最大路径和-字节跳动高频题

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