GESP 六级 · GESP 202603 C++ 六级 第 23 题

判断题 · 答案 A · 考点:复杂度分析

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

题目

设二叉树共有 $n$ 个结点,函数 preorderTraversal 以下代码的时间复杂度为 $O(n)$,空间复杂度为 $O(n)$。

struct TreeNode {
    int val;
    TreeNode* left;
    TreeNode* right;
    TreeNode(int x): val(x), left(nullptr), right(nullptr) {}
};

void preorder(TreeNode *root, vector<int> &res) {
    if (root == nullptr) {
        return;
    }
    res.push_back(root->val);
    preorder(root->left, res);
    preorder(root->right, res);
}

vector<int> preorderTraversal(TreeNode *root) {
    vector<int> res;
    preorder(root, res);
    return res;
};
答案:A

考点

复杂度分析

解题思维

分析时间复杂度时关注循环层数和每层迭代次数,递归算法则分析递归树。注意最坏/最好/平均情况的区别。

常见错误

分析复杂度时注意外层循环和内层循环的关联。例如内外两层都到n的循环不一定是O(n²),要看内层是否每次都在缩小。

详细解析(节选)

【考点】二叉树遍历|递归复杂度分析|最坏情况

1. 🎯 考纲定位

GESP 六级算法设计模块,命题人卡住的是学生"只看代码行数"的直觉。时间复杂度公式 O(n) 是 GESP 六级明确要求的,但空间复杂度 O(n) 才是这道题的杀手锏——它要求考生不仅会看"push_back",还要能追踪递归栈的线性增长。

同考点真题

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