文章

8

粉丝

0

获赞

1

访问

611

头像
2025 年 9 月第 1 次 408 月考试卷 - 第41题回答
数据结构
发布于2025年9月20日 17:00
阅读数 79

(1)利用二叉树的深搜,递归检查每个节点是否符合条件,若左右子树有一个不满足条件或不存在则返回false。设置变量count=0,记录符合条件的非叶节点。递归函数的参数中维护一个当前最小值min_d与左右子树的最小距离比较,若相等则符合条件。

(2)

count=0;//全局变量记录符合条件的结点数

int dfs(TreeNode* root,int d){
    if(root->left==NULL||root->right==NULL)return -1;
    int li=dfs(root,abs(root->data - root->left->data));
    int ri=dfs(root,abs(root->data - root->right->data));
    if(li!=-1&&ri!=-1){//执行比对最小值是否相等
        count++;//相等则+1
        return min(abs(root->data - root->left->data),abs(root->data - root->right->data));
    }
    return -1;
}
int countNodes(TreeNode* root){
    dfs(root,INT_MAX);
    return count;
}

(3)节点数为记为n,深搜dfs的时间复杂度为O(n)


评分及理由

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

学生答案的基本设计思想描述不清晰,且存在逻辑错误。学生提到“递归检查每个节点是否符合条件,若左右子树有一个不满足条件或不存在则返回false”,但未明确说明如何计算左右子树的最小距离,且递归函数参数设计不合理(参数d未在函数内使用)。与标准答案的暴力解思想部分相关,但描述不完整且关键细节缺失。因此扣2分,得1分。

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

学生代码存在多处严重逻辑错误:
1. 递归函数dfs的参数设计错误:参数d未使用,且递归调用时传递的参数不合理(传递abs差值而非子树根节点)。
2. 递归终止条件错误:仅检查左右子树是...

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发