二叉树深度
时间: 2025-03-20 09:01:19 浏览: 38
### 计算二叉树的深度
#### 方法一:递归法
递归法是最常见的用于计算二叉树深度的方法之一。其核心思想是分别递归地计算左子树和右子树的深度,然后取两者的较大值并加1作为整棵树的深度。
以下是基于 Python 的递归实现:
```python
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def maxDepth(root: TreeNode) -> int:
if root is None:
return 0
else:
left_depth = maxDepth(root.left) # 左子树的深度
right_depth = maxDepth(root.right) # 右子树的深度
return max(left_depth, right_depth) + 1 # 整体深度为左右子树中的最大值再加1
```
这种方法的时间复杂度为 O(n),其中 n 是节点的数量,因为每个节点都会被访问一次[^1]。然而需要注意的是,如果二叉树非常不平衡,则可能导致栈溢出的风险,尤其是在极端情况下(如退化成链表的情况)。此外,由于递归会重复调用函数本身,因此效率可能不如迭代方法高[^2]。
#### 方法二:非递归法(层序遍历)
另一种方式是非递归的方式——即采用广度优先搜索(BFS),也叫层次遍历。这种方式不需要显式的递归操作,而是借助队列来逐层处理节点。
下面是使用 BFS 实现的 Python 版本代码:
```python
from collections import deque
def maxDepth(root: TreeNode) -> int:
if not root:
return 0
queue = deque([(root, 1)]) # 初始化队列为根节点及其对应的层数
while queue:
node, level = queue.popleft()
if node.left:
queue.append((node.left, level + 1))
if node.right:
queue.append((node.right, level + 1))
return level # 返回最后处理的那一层的高度
```
此版本通过维护一个队列记录每一层上的所有节点,并逐步扩展到下一层直到没有更多节点为止。相比起递归形式来说,该方法可以有效避免因过深嵌套而引发的堆栈错误问题[^5]。
#### 性能对比分析
尽管两种算法都可以正确得出结果,但在实际应用中它们各有优劣之处。对于平衡较好的二叉树而言,上述任一种方案都能高效完成任务;但对于极度倾斜甚至接近单向列表形态的数据集时,推荐选用迭代型解决方案以规避潜在风险[^4]。
### 结论
综上所述,无论是采取哪种策略解决此类题目都需要清楚理解各自适用场景以及局限所在以便做出最佳选择依据具体需求情况决定最适合自己的工具箱选项即可满足日常开发工作当中遇到的相关挑战[^3]。
阅读全文
相关推荐

















