文章

189

粉丝

0

获赞

1

访问

34.0k

头像
2026年(408)计算机学科专业基础综合试题 - 第41题回答
数据结构
发布于2025年12月26日 10:58
阅读数 32

int res=10000000;
int dian=0;
void findClose(BSTNode* root,int k){
    if(root!=NULL){
          if(res>=abs(root,k)){  //若当前节点与K的差的绝对值更小,则更新最小值和节点中的关键字
             res=abs(root,k) ;
             dian=root->data;
           }
    if(root->left!=NULL) findClose(root->left,k);  //遍历左子树
    if(root->right!=NULL) findClose(root->right,k);  //遍历右子树
}
cout<<res;
cout<<dian;

(1)计算当前节点关键字与K只差的绝对值,若比最小值res更小,则更新最小值res和节点中的关键字dian,若树的左子树不为空,则遍历他的左子树,若树的右子树不为空,则遍历他的右子树,最后遍历完成,输出最小值res和节点中的关键字dian即可。


评分及理由

(1)得分及理由(满分4分)

得分:2分

理由:学生给出的基本思想描述了遍历二叉树并比较绝对值的过程,但存在以下问题:
1. 没有明确指出利用二叉搜索树中序遍历的递增特性,这是优化算法的关键。
2. 描述中仅提到“若树的左子树不为空,则遍历左子树”,这是一种前序遍历或任意遍历方式,没有利用二叉搜索树的性质,可能导致效率低下。
3. 基本思想不够精确,没有说明如何找到“所有”最小绝对值的结点(学生代码实际上只保存了一个结点,与题目要求不符)。
扣2分:思路不完整,未体现二叉搜索树特性,且未正确处理“所有结点”的要求。

(2)得分及理由(满分8分)

得分:3分

理由:代码存在多处逻辑错误和不符合题目要求的地方:
1. 函数调用错误:abs(root,k) 不是标准库函数,应为 abs(root->data - k)
2. 遍历方式错误:使用前序遍历(先根后左右)而非中序遍历,无法利用二叉搜索树有序特性提前终止搜索。
3. 只保存一个结点:变量 dian 只保存一个结点的值,但题目要...

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发