文章

161

粉丝

0

获赞

0

访问

20.1k

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

(2)int res=0;//初始化结点数
int countNodes(TreeNode * root) {
    if(root->left==NULL&&root->right==NULL) {
        return 0;
    }
    if(check(root)) res++;
    return res+countNode(root->left)+countNode(root->right);
}
bool check(TreeeNode* root) { //判断当前结点是否符合条件
    if(root->left==NULL&&root->right==NULL) {
        return false;
    }
    if(abs(root->left->val-root->val)==abs(root->right->val-root->val)) {
        return true;
    } else return false;
}
}

(3)时间复杂度:O(n) 空间复杂度:O(1)


评分及理由

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

得分:1分

理由:学生的设计思想中提到了判断左右子树是否为空,以及比较左右子结点与当前结点的距离是否相等。但存在以下问题:

  • 没有明确说明需要遍历整个二叉树(虽然代码中体现了递归遍历)。
  • 核心逻辑错误:题目要求的是左子树中所有结点与当前结点的最小距离等于右子树中所有结点与当前结点的最小距离,而学生只比较了左右子结点与当前结点的距离,这是不正确的。例如,在示例中结点4的左子结点3的距离是1,右子结点6的距离是2,但左子树中最小距离是1(正确),右子树中最小距离是2(正确),但学生的方法会错误地比较左右子结点的距离(1和2)而认为不满足条件...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发