请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

5-7 麻烦老师帮我看一下非递归实现是否正确

Key minimum(){
    assert(count>0);
    Node* current = root;
    while(current->left!=null){
        current = current->left;
    }
    return current->key;
}

void removeMin(){
    assert(count>0);
    Node* current = root;
    Node* parent = null;
    while(current->left!=null){
        parent = current;
        current = current->left;
    }
    if(parent!=null){
        parent->left = current->right;
    }
    delete current;
    count--;
}

不知道写得对不对,也想知道removeMin有没有更简便的写法。谢谢老师

正在回答

2回答

liuyubobobo 2022-04-07 03:40:16

这个代码有问题。如果最小值是 root 会出问题。比如:

1
 \
  2
   \
    3


测试一下试试看?


继续加油!:)

0 回复 有任何疑惑可以回复我~
  • 提问者 慕运维2948618 #1
    我检查了一下,不过minimum应该没写错吧?
    removeMin确实存在如老师所说的这种情况。
    由于原问题不能修改,我将修正后的代码写在回答上了,希望老师能再次审阅,谢谢。
    回复 有任何疑惑可以回复我~ 2022-04-07 09:09:30
  • liuyubobobo 回复 提问者 慕运维2948618 #2
    这次没有问题了,继续加油!:)
    回复 有任何疑惑可以回复我~ 2022-04-07 09:12:54
  • 提问者 慕运维2948618 #3
    非常感谢!
    回复 有任何疑惑可以回复我~ 2022-04-07 09:25:06
提问者 慕运维2948618 2022-04-07 09:11:07
void removeMin(){
    assert(count>0);
    Node* current = root;
    Node* parent = null;
    while(current->left!=null){
        parent = current;
        current = current->left;
    }
    if(parent!=null){
        parent->left = current->right;
    }else{
        root = root->right;
    }
    delete current;
    count--;
}


0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号