104.二叉树的最大深度
思路
使用后序遍历,计算二叉树的高度,到根节点的高度既二叉树的最大深度
# 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 maxDepth(self, root: Optional[TreeNode]) -> int:
#递归函数
def Depth(root):
if not root:
return 0
leftheight = Depth(root.left) #遍历左子树
rightheight = Depth(root.right) #遍历右子树
result = 1 + max(leftheight, rightheight) #将其最大值加1
return result
return Depth(root)
111.二叉树的最小深度
思路
与求最大深度相似,依旧使用后序遍历
代码
后序遍历 递归法
# 二叉树节点的定义
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def minDepth(self, root: Optional[TreeNode]) -> int:
# 辅助函数,用于计算节点的深度
def getDepth(node):
# 基本情况:如果节点为None,则深度为0
if not node:
return 0
# 递归计算左右子树的深度
left = getDepth(node.left)
right = getDepth(node.right)
# 检查子节点是否有一个为None,并返回非None子节点的深度
if node.left != None and node.right == None:
return 1 + left
if node.left == None and node.right != None:
return 1 + right
# 如果两个子节点都存在,则返回两个子树深度的最小值加1
result = 1 + min(left, right)
return result
# 调用辅助函数计算二叉树的最小深度
return getDepth(root)
222.完全二叉树的节点个数
思路
与计算深度类似,记录遍历的节点数量就可以
代码
# 二叉树节点的定义
# 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: Optional[TreeNode]) -> int:
# 辅助函数,用于计算节点的数量
def getNodes(node):
# 基本情况:如果节点为None,则节点数量为0
if node == None:
return 0
# 递归计算左右子树的节点数量
left = getNodes(node.left)
right = getNodes(node.right)
# 当前节点 + 左子树节点数量 + 右子树节点数量
result = 1 + left + right
return result
# 调用辅助函数计算二叉树的节点数量
return getNodes(root)