文章

7

粉丝

0

获赞

0

访问

3.3k

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

// 计算当前节点子树中与目标值的最小绝对差
int minDist(TreeNode* r, int t) {
    if (!r) return INT_MAX; // 空节点返回极大值
    int d = abs(r->val - t); // 当前节点与目标的绝对差
    // 返回当前差和左右子树最小差中的最小值
    return min({d, minDist(r->left, t), minDist(r->right, t)});
}

int countNodes(TreeNode* root) {
    if (!root) return 0; // 空树返回0
    int cnt = 0;
    // 检查当前节点是否同时有左右子树且最小距离相等
    if (root->left && root->right) {
        int ld = minDist(root->left, root->val); // 左子树最小距离
        int rd = minDist(root->right, root->val); // 右子树最小距离
        if (ld == rd) cnt++; // 满足条件则计数
    }
    // 递归统计左右子树满足条件的节点数
    return cnt + countNodes(root->left) + countNodes(root->right);
}
// 计算当前节点子树中与目标值的最小绝对差
int minDist(TreeNode* r, int t) {
    if (!r) return INT_MAX; // 空节点返回极大值
    int d = abs(r->val - t); // 当前节点与目标的绝对差
    // 返回当前差和左右子树最小差中的最小值
    return min({d, minDist(r->left, t), minDist(r->right, t)});
}

int countNodes(TreeNode* root) {
    ...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发