leetcode 104 二叉树的(最大)深度
此题有很多种做法,这里主要记录递归的方法。二叉树的最大深度即是每个节点左右节点中较大的深度加1,按这种方法递归直到根节点就能找出最大深度,代码非常直观简单。
遇到递归日常思考:
- 输入是什么:要求最大深度的根节点
- 输出是什么:当前根节点下的最大深度
- 该递归函数的功能是什么:求出当前根节点的最大深度
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