题目描述:
给定一个二叉树,找出其最大深度。
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
说明: 叶子节点是指没有子节点的节点。
示例:
给定二叉树 [3,9,20,null,null,15,7],
3
/
9 20
/
15 7
返回它的最大深度 3 。
思路:
- 广度优先搜索——层次遍历:在遍历的时候判断是否为叶子节点,最大层数就是树的深度。
时间复杂度和空间复杂度都是O(n),时间是因为要遍历所有的结点,空间是因为要使用一个队列辅助完成层次遍历。 - 深度优先搜索,递归的方式:
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution(object):
def maxDepth(self, root):
"""
:type root: TreeNode
:rtype: int
"""
if not root:
return 0
left = self.maxDepth(root.left)
right = self.maxDepth(root.right)
return 1 + max(left, right)
时间复杂度:O(n)O(n),其中 n 为二叉树节点的个数。每个节点在递归中只被遍历一次。
空间复杂度:O(height),其中 height 表示二叉树的高度。递归函数需要栈空间,而栈空间取决于递归的深度,因此空间复杂度等价于二叉树的高度。
该博客介绍了如何计算二叉树的最大深度。提供了两种方法,一种是使用广度优先搜索(BFS),另一种是通过深度优先搜索(DFS)递归实现。在DFS方法中,通过比较左右子树的最大深度来确定树的最大深度。时间复杂度和空间复杂度分别是O(n)和O(height),其中n是节点数量,height是二叉树的高度。
645

被折叠的 条评论
为什么被折叠?



