华为OD机考双机位C卷 - 二叉树的广度优先遍历 (Java & Python & JS & GO & C++ & C)

2 阅读2分钟

二叉树的广度优先遍历

2026华为OD机试双机位C卷 - 华为OD上机考试双机位C卷

华为OD机试双机位C卷真题目录点击查看: 【全网首发】2026华为OD机位C卷 机考真题题库含考点说明以及在线OJ(OD上机考试双机位C卷)

题目描述

有一棵二叉树,每个节点由一个大写字母标识(最多26个节点)。

现有两组字母,分别表示后序遍历(左孩子->右孩子->父节点)和中序遍历(左孩子->父节点->右孩子)的结果,请你输出层序遍历的结果。

输入描述

每个输入文件一行,第一个字符串表示后序遍历结果,第二个字符串表示中序遍历结果。(每串只包含大写字母)

中间用单空格分隔。

输出描述

输出仅一行,表示层序遍历的结果,结尾换行。

示例1

输入

CBEFDA CBAEDF

输出

ABDCEF

说明

二叉树为:

      A
    /   \
   B     D
 /      /  \
C      E    F

解题思路

解题思路

1. 理解遍历序列的特点

  • 后序遍历:左子树 -> 右子树 -> 根节点
    • 后序遍历的最后一个元素必定是整棵树的根节点
  • 中序遍历:左子树 -> 根节点 -> 右子树
    • 在中序遍历中,根节点左边的元素属于左子树,右边的元素属于右子树

2. 构建二叉树

  1. 确定根节点:从后序遍历的最后一个元素得到根节点
  2. 划分子树
    • 在中序遍历中找到根节点位置
    • 根据根节点位置,将中序序列分为左子树和右子树两部分
    • 根据左子树大小,同样可以在后序序列中划分出左右子树部分
  3. 递归构建
    • 对左右子树分别递归应用上述过程
    • 递归终止条件是子树为空

3. 层序遍历

  • 使用队列进行广度优先搜索(BFS)

  • 先将根节点入队

  • 循环处理队列中的节点:

    • 取出队首节点并输出
    • 将其左右子节点(如果存在)加入队列
  • 直到队列为空,完成层序遍历