1. 题目描述
2. 题目分析与解析
这个题目有过一定基础的都应该知道,采用递归解决问题,因为要求一个二叉树的深度(也就是高度),其实上就是根节点的左子树和右子树中高度最高的那个。因此这个问题就可以拆解为:
-
求左子树的高度
-
求右子树的高度
-
取左右子树中高度最高的那个
-
加上根节点的高度
-
返回条件为:如果根节点为空,返回0
直接进行代码实现。
3. 代码实现
4. 相关复杂度分析
时间复杂度分析
-
在最坏情况下,每个节点都要被访问一次。
-
对于每个节点,都需要进行比较以找到左右子树的最大深度。
-
所以,时间复杂度为 O(n),其中 n 是二叉树中的节点数。
空间复杂度分析
-
递归调用会使用栈空间。
-
在最坏情况下,二叉树是完全不平衡的,递归调用的最大深度等于树的高度,即 O(h),其中 h 是二叉树的高度。
-
最好的情况下,二叉树是平衡的,递归调用的最大深度等于树的深度,即 O(log n),其中 n 是二叉树中的节点数。
-
因此,空间复杂度在最坏情况下为 O(n),最好情况下为 O(log n)。
综上所述,时间复杂度为 O(n),空间复杂度最坏情况下为 O(n),最好情况下为 O(log n)。