代码随想录训练营第16天|最大最小深度|平衡二叉树的节点个数
104.二叉树的最大深度
最大深度是3
class Solution: def maxDepth(self, root: TreeNode) -> int: # 主方法,用于启动深度计算过程 return self.getDepth(root) def getDepth(self, node): # 递归方法,用于计算节点的深度 if not node: # 如果当前节点为空,说明到达了叶子节点的下一个位置,返回深度0 return 0 leftheight = self.getDepth(node.left) # 对左子树递归调用getDepth,计算左子树的深度 rightheight = self.getDepth(node.right) # 对右子树递归调用getDepth,计算右子树的深度 # 当前节点的深度是左右子树深度的最大值加1(加的这1代表当前节点的深度贡献) height = 1 + max(leftheight, rightheight) return height
111.二叉树的最小深度
可能存在只有一边有节点的情况
class Solution: def getDepth(self, node): if node is None: return 0 leftDepth = self.getDepth(node.left) # 左 rightDepth = self.getDepth(node.right) # 右 # 当一个左子树为空,右不为空,这时并不是最低点 if node.left is None and node.right is not None: return 1 + rightDepth # 当一个右子树为空,左不为空,这时并不是最低点 if node.left is not None and node.right is None: return 1 + leftDepth result = 1 + min(leftDepth, rightDepth) return result def minDepth(self, root): return self.getDepth(root)
222.完全二叉树的节点个数
利用完全二叉树的特性,判断是不是满二叉树
# Definition for a binary tree node. # class TreeNode: # def __init__(self, val=0, left=None, right=None): # self.val = val # self.left = left # self.right = right class Solution: def countNodes(self, root: TreeNode) -> int: if not root: return 0 left = root.left right = root.right leftDepth = 0 #这里初始为0是有目的的,为了下面求指数方便 rightDepth = 0 while left: #求左子树深度 left = left.left leftDepth += 1 while right: #求右子树深度 right = right.right rightDepth += 1 if leftDepth == rightDepth: return (2 << leftDepth) - 1 #注意(2<<1) 相当于2^2,所以leftDepth初始为0 return self.countNodes(root.left) + self.countNodes(root.right) + 1