📜  层序二叉树遍历(1)

📅  最后修改于: 2023-12-03 14:53:57.058000             🧑  作者: Mango

层序二叉树遍历

在二叉树中,层序遍历是一种逐层遍历节点的方法,是一种广度优先遍历。层序遍历可以按照从上到下、从左到右的顺序遍历,同时也可以逐层输出节点。

实现方法

在层序遍历中,我们需要使用队列来存储节点,同时也需要使用一个当前遍历的层数来判断当前节点属于哪一层。

以下是使用 Python 语言实现层序遍历的代码:

def levelOrder(root):
    # 如果根节点为空,直接返回空列表
    if not root:
        return []
    # 创建一个队列,并将根节点入队
    queue = [root]
    # 初始化结果列表
    res = []
    # 当队列不为空时,循环遍历队列中的节点
    while queue:
        # 获取当前队列的长度,即为当前节点属于的层数
        level_len = len(queue)
        # 创建当前层的列表
        cur_level = []
        # 循环遍历当前层的节点
        for i in range(level_len):
            # 将当前节点出队,并将其值添加到当前层的列表中
            node = queue.pop(0)
            cur_level.append(node.val)
            # 如果当前节点有左子节点,将其入队
            if node.left:
                queue.append(node.left)
            # 如果当前节点有右子节点,将其入队
            if node.right:
                queue.append(node.right)
        # 将当前层的列表添加到结果列表中
        res.append(cur_level)
    return res
性能分析

上面的代码中,我们使用了一个队列来存储节点,并在循环遍历队列中的节点时,遍历了每一层的所有节点,因此时间复杂度为 $O(n)$。

同时,我们也使用了一个结果列表来存储每一层的节点,因此空间复杂度为 $O(n)$。

总结

层序遍历是二叉树的一种重要遍历方法,其使用了队列来存储节点,并遍历了每一层的所有节点。在实现层序遍历时,需要考虑空节点的情况,并使用一个结果列表来存储每一层的节点。