文章

2

粉丝

0

获赞

0

访问

852

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

(1)根据题给条件,采用递归算法思想,进行判断。若该结点为空结点或没有同时存在左右子树,则该节点本身不是所求节点,直接返回左子树或右子树中满足条件的结点个数;若该节点同时有左右子树,因为是二叉搜索树,因此该结点与左子树最小距离是与左子树中最右下结点的距离,与右子树最小距离是与右子树中最坐下结点的距离,判断这两个距离是否相等,若相等则说明该结点满足,返回左子树和右子树中满足条件的结点个数之和再加一;若不相等,返回左子树和右子树中满足条件的结点个数之和。

(2)

int countNodes(TreeNode* root){
    if(root == NULL) return 0;

    //如果该结点没有左孩子或者右孩子,则该结点本身不是;
    else if (root->left == NULL || root->right == NULL){
       return countNodes(root->left) + countNodes(root->right); 
    }

    TreeNode* leftmax = root->left;
    TreeNode* rightmin = root->right;//记录左右子树与root的最小距离的结点
    while(leftmax->right != NULL) leftmax = leftmax->right;
    while(rightmin->left != NULL) rightmin = rightmin->left;
    if(root->val - leftmax->val == rightmin->val - rooot->val) 
      return return countNodes(root->left) + countNodes(root->right) + 1;
    else return countNodes(root->left) + countNodes(root->right);
}

(3)二叉搜索树的高度为h = log n,在递归内部查找最小距离的时间 &...

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发