目录

  1. 层序遍历的基本概念
  2. 层序遍历的步骤
  3. 时间复杂度分析
  4. 代码示例(伪代码)
  5. 参考资料

1. 层序遍历的基本概念

层序遍历(Level-Order Traversal)是一种广度优先遍历(Breadth-First Traversal, BFT)方法,按照树的层级从上到下、从左到右依次访问每个节点。在二分搜索树中,层序遍历不一定反映值的有序性,但可以直观展示树的结构。它通常使用队列实现。


2. 层序遍历的步骤

层序遍历一个 BST 的过程如下:

  1. 初始化
  • 创建一个空队列,将根节点入队。
  1. 遍历每一层
  • 当队列不为空时:
    • 取出队首节点并访问(例如打印其值)。
    • 将该节点的左子节点(若存在)入队。
    • 将该节点的右子节点(若存在)入队。
  1. 重复步骤 2
  • 直到队列为空,遍历结束。

示例

对以下 BST 进行层序遍历:

    5
   / \
  3   7
 / \
1   4
  • 初始:队列 = [5]
  • 访问 5,出队,入队 3 和 7,队列 = [3, 7]
  • 访问 3,出队,入队 1 和 4,队列 = [7, 1, 4]
  • 访问 7,出队,无子节点,队列 = [1, 4]
  • 访问 1,出队,无子节点,队列 = [4]
  • 访问 4,出队,无子节点,队列 = []
  • 输出:5, 3, 7, 1, 4

3. 时间复杂度分析

  • 时间复杂度:O(n)
  • 每个节点恰好入队和出队一次,n 为节点数。
  • 空间复杂度:O(w)
  • w 为树的最大宽度(即某层节点的最大数量)。对于平衡 BST,w ≈ n/2,平均 O(n);最差情况(如退化为链表),w = 1,O(1)。

4. 代码示例(伪代码)

class Node:
    value         // 节点值
    left          // 左子节点
    right         // 右子节点

class BST:
    root          // 根节点

    // 层序遍历
    function levelOrder():
        if root is null:
            return
        queue = new Queue()
        queue.enqueue(root)
        while queue is not empty:
            node = queue.dequeue()
            print(node.value)
            if node.left is not null:
                queue.enqueue(node.left)
            if node.right is not null:
                queue.enqueue(node.right)

5. 参考资料


如果你需要特定语言的实现代码(如 Python、Java)或对层序遍历有进一步疑问,请告诉我!