Leetcode刷题10.22——二叉树的(最大)深度 & 二叉树的直径

leetcode 104 二叉树的(最大)深度

  此题有很多种做法,这里主要记录递归的方法。二叉树的最大深度即是每个节点左右节点中较大的深度加1,按这种方法递归直到根节点就能找出最大深度,代码非常直观简单。

  遇到递归日常思考:

  1. 输入是什么:要求最大深度的根节点
  2. 输出是什么:当前根节点下的最大深度
  3. 该递归函数的功能是什么:求出当前根节点的最大深度
class Solution:
    def maxDepth(self, root: TreeNode) -> int:
        if not root:
            return 0
        else:
            return max(self.maxDepth(root.left), self.maxDepth(root.right)) + 1

leetcode 543 二叉树的直径

 

  此题看起来跟上一题非常相似,仔细想一下实际上就是多了一个把左右节点最大深度相加的步骤。另外,可以在计算的时候仍然按照节点的深度来算,最后的结果减一即可,这样会简化很多思考的步骤,也可以直接用上一题的思路来做。本题目用到了全局变量,巧妙的地方在于该题中的递归函数不需要做什么本质上的改变,只需要多两个分别记录左右节点深度的变量,并加入全局变量的最大值比较即可。

class Solution:
    def diameterOfBinaryTree(self, root: TreeNode) -> int:
        self.Max = 1    # 需要设置一个全局变量跟自己比较
        def maxDepth(r):
            if not r:
                return 0
            else:
                L = maxDepth(r.left)
                R = maxDepth(r.right)
                self.Max = max(L+R+1,self.Max)  
                return max(L, R)+1
        maxDepth(root)
        return self.Max-1

 

posted @ 2020-10-24 22:35  爱吃虾的小暹罗  阅读(98)  评论(0编辑  收藏  举报