题目描述
示例
方法一:深度优先搜索
思路和算法
如果我们知道了左子树和右子树的最大深度 l 和 r ,那么该二叉树的最大深度即为 max(l, r) +1
而左子树和右子树的最大深度又可以以同样的方式进行计算。因此我们可以用【深度优先搜索】的方法来计算二叉树的最大深度。具体而言,在计算当前二叉树的最大深度时,可以先递归计算出其左子树和右子树的最大深度,然后在O(1)时间内计算出当前当前二叉树的最大深度。递归在访问到空节点时退出。
代码
# 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: TreeNode) -> int:
if root is None:
return 0
else:
left_height = self.maxDepth(root.left)
right_height = self.maxDepth(root.right)
return max(left_height, right_height) + 1
方法二:广度优先搜索
思路和算法
用广度优先搜索的方法来解时,我们需要对其进行一些修改,此时我们广度优先搜索的队列里存放的是【当前层的所有节点】。每次拓展下一层的时候,不同于深度优先搜索的每次只从队列里拿出一个节点,我们需要将队列里的所有节点都拿出来进行拓展,这样能保证每次拓展完的时候队列里存放的是当前层的所有节点,即我们是一层一层地进行拓展,最后我们用一个变量 ans 来维护拓展地次数,该二叉树地最大深度即为 ans。
代码
# 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: TreeNode) -> int:
if root is None:
return 0
queue = []
queue.append(root)
ans = 0
while queue:
# size是每层地节点个数
size = len(queue)
while size > 0:
node = queue.pop(0)
if node.left:
queue.append(node.left)
if node.right:
queue.append(node.right)
size -= 1
ans += 1
return ans