用递归实现二叉树的层次遍历
时间: 2023-09-03 10:13:10 浏览: 94
递归实现二叉树的层次遍历相对不太常见,但是可以通过递归实现。递归实现二叉树的层次遍历需要借助队列,具体步骤如下:
1. 定义一个队列,将根节点入队;
2. 定义一个辅助函数,该函数接收一个队列作为参数,并将队列中的节点按照层次顺序出队并访问其值,同时将其左右子节点入队;
3. 调用辅助函数,开始遍历。
下面是实现代码:
```python
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def levelOrder(root):
res = []
if not root:
return res
def dfs(node, depth):
if len(res) == depth:
res.append([])
res[depth].append(node.val)
if node.left:
dfs(node.left, depth+1)
if node.right:
dfs(node.right, depth+1)
dfs(root, 0)
return res
```
在辅助函数 `dfs` 中,我们传入了节点和节点所处的深度,如果当前深度在结果列表中不存在,就在结果列表中添加一个新的空列表,然后将当前节点的值加入到该列表中。接着,我们判断当前节点是否有左右子节点,如果有,就调用 `dfs` 函数遍历其子节点,并将深度加 1。最后,我们调用 `dfs` 函数遍历根节点,并将深度初始化为 0,返回结果列表 `res` 即可。
需要注意的是,这种方法虽然可以实现二叉树的层次遍历,但是由于递归的过程中需要将每一层的节点都存入结果列表中,因此空间复杂度较高。如果二叉树深度较大,可能会导致栈溢出或者内存不足问题。因此,建议在实际应用中使用迭代的方式实现二叉树的层次遍历。
阅读全文