对于二叉树总是不了解,实在没办法,准备全部照抄一遍,不行就背下来。
104.二叉树的最大深度
递归三部曲: | ①参数和返回值: | 参数:传入树的根节点 | ||
返回:返回这棵树的深度,所以返回值为int | ||||
随想录 | ②终止条件: | 如果是空节点,就返回0,表示高度为0 | ||
③单层递归逻辑: | 先求它的左子树的深度,再求的右子树的深度, | |||
最后取左右深度最大的数值 再+1 (加1是因为算上当前中间节点) | ||||
就是目前节点为根节点的树的深度。 |
def maxDepth(self, root: Optional[TreeNode]) -> int:
#可以不另外define一个函数,直接用递归。另外一种是另外define一个函数再调用
#这种其实是精简后的递归code
if not root:
return 0
return max(self.maxDepth(root.left),self.maxDepth(root.right))+1
111.二叉树的最小深度
def minDepth(self, root: Optional[TreeNode]) -> int:
if not root:
return 0
if not root.left and not root.right: #左右字数都没有,才是高度1
return 1
min_depth = 10**9
if root.left:
min_depth = min(self.minDepth(root.left),min_depth)# 获得左子树的最小高度
if root.right:
min_depth = min(self.minDepth(root.right), min_depth) # 获得右子树的最小高度
return min_depth + 1
222.完全二叉树的节点个数
直接用了精简版的递归。感觉这种反而比要另外define函数的递归容易理解。左子树节点数量+右子树节点数量+自己本身这个节点1
def countNodes(self, root: Optional[TreeNode]) -> int:
if not root:
return 0
return 1+ self.countNodes(root.left)+self.countNodes(root.right)