GESP 六级 · GESP 202403 C++ 六级 第 8 题

选择题 · 答案 C

← 整套速查表 GESP 六级 全部真题

题目

阅读以下广度优先搜索的代码:

void bfs(TreeNode* root) {
    if (root == NULL) {
        return;
    }
    queue<TreeNode*> q;
    q.push(root);
    while (!q.empty()) {
        TreeNode* current = q.front();
        q.pop();
        cout << current->val << " ";
        if (current->left) {
            q.push(current->left);
        }
        if (current->right) {
            q.push(current->right);
        }
    }
}

使用以上算法遍历以下这棵树,可能的输出是( )。

    1
   / \
  2   3
 / \   \
8   9   6
   / \   \
  4   5   7
       / \
      10  11
答案:C

解题思维

排列组合问题:先判断是否考虑顺序(排列P vs 组合C),再确定是否允许重复。乘法原理分步,加法原理分类。

常见错误

区分排列(考虑顺序,$P(n,m)$)和组合(不考虑顺序,$C(n,m)$)。注意特殊元素优先处理、正难则反等计数技巧。

详细解析(节选)

【考点】广度优先遍历|队列操作|二叉树层级顺序

看到队列代码立刻锁定「先入先出」和「左子优先」两个铁律。节点被压入队列的顺序,就是它们最终输出的顺序——这是 BFS 的本质。

模拟队列变化:初始推入 1;弹出 1 后压 2、3;弹出 2 后压 8、9;弹出 3 后压 6;弹出 8 后压无;弹出 9 后压 4、5;弹出 6 后压 7;弹出 4 后压无;弹出 5 后压 10、11;弹出 7 后压无;最后弹出 10、11。输出序列:1 2 3 8 9 6 4 5 7 10 11,与 C 完全匹配。

逐一排除错误选项的底层逻辑:

在 OI伴学 里做这道题
登录后可计时作答、查看完整六段式解析,并按你的错题自动生成同类练习。
去刷题先做一次 AI 学情诊断