GESP 六级 · GESP 202606 C++ 六级 第 20 题

判断题 · 答案 B · 考点:搜索

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

题目

下列函数试图将整数 x 插入到一棵二叉搜索树中。假设二叉搜索树满足如下性质:对于任意结点,左子树中所有结点的值均小于该结点的值,右子树中所有结点的值均大于或等于该结点的值。判断该函数是否能够在插入后保持二叉搜索树性质。

struct TreeNode {
    int val;
    TreeNode* left;
    TreeNode* right;
    TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};
TreeNode* insertNode(TreeNode* root, int x) {
    if (root == nullptr) {
        return new TreeNode(x);
    }
    if (x < root->val) {
        root->right = insertNode(root->right, x);
    } else {
        root->left = insertNode(root->left, x);
    }
    return root;
}
答案:B

考点

搜索

解题思维

仔细审题,明确已知条件和所求目标,运用相关知识点逐项分析。

常见错误

审题时注意题目要求(选正确还是选错误),避免因审题不清失分。涉及代码的题目要逐行分析变量变化。

详细解析(节选)

【考点】二叉搜索树性质|递归实现|逻辑判断

考纲定位:本题对应 GESP C++ 六级"数据结构与算法"中二叉树的二叉搜索树专题。命题人把"左小右大"的条件全写反了,专门卡住只看语法不看逻辑的考生——六级考的不只是会写递归,而是理解 BST 的插入规则。

解题思维:插入节点的核心规则是:小于当前值走左子树,大于等于当前值走右子树。但代码里 if (x < root->val) 却执行了 root->right = ...,直接把更小的值塞进右边;else 分支又把 x >= root->val 的情况送进左边。递归框架没问题,条件分支写反了,整个树的结构就完全颠倒了。

陷阱拆解:选项 A 陷阱在于代码能跑通,新手容易忽略逻辑方向。最阴险的是它利用了"递归看起来很像"的错觉,让你以为只要结构是树就行。如果你只背"BST 要有序"却背不出"左小右大"的具体写法,就会选错。两个分支都反了,说明不是边界问题,而是根本逻辑错误。

反命题思维:反过来想,如果题目改成"判断能否保持最大堆性质(根最大)",那这个函数反而是错的,因为它把大的放左边了。刷到这类题先问自己:"这棵树到底要满足什么性质?"别被递归包装迷惑。

同考点真题

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