老师,这是我写的非递归调用,麻烦老师帮忙看看有没有什么问题呢?

来源:5-7 删除最大值,最小值

wang_liu

2017-06-02

void removeMin(Node* node)

{

while (node->left != NULL)

{

nodeBefore = node;

node = node->left;

}

Node* rightNode = node->right;

delete node;

count--;

nodeBefore->left = rightNode;

}


写回答

1回答

liuyubobobo

2017-06-20

抱歉,今天刚看到这里漏掉了一个问题没有回答...


整体思路非常赞!不过有一些小问题可以注意:


1)程序相当于一上来就调用 while (node->left != NULL) 这一判断,但是如果node为空,调用这一判断就会产生空指针访问的问题,所以在整个程序最开始,应该判断一下,如果node为空,直接返回NULL;


2)这个方法是应该放在类BST中的。从用户的角度,用户想要删除BST类的某个实例bst中的最小值,直接调用bst.removeMin()应该就可以了,而不需要往里面传入一个node,不然用户会很迷惑,需要传入什么node?注意,在我们的设计中,整棵树的根节点是一个私有变量。用户不应该可以直接访问整棵树的根节点。所以具体应该在这个算法中,由开发者指定从根节点开始逐渐向下搜索到合适的位置,而不需要用户的传参。注意我们课程中的递归调用版本的removeMin,用户真正可见部分的函数声明是:


void removeMin(){    
    if( root )    
        root = removeMin( root );    
}


赞亲自动手主动实践的精神!


加油!

1
2
liuyubobobo
回复
PTH
没有理解你的问题。开新帖把你的完整代码展示出来吧。在具体开贴之前,更建议你先自己测试一下,如果发现有问题,先试试自己能不能调试好?加油!:)
2018-07-17
共2条回复

算法与数据结构(C++版) 面试/评级的算法复习技能包

课程专为:短时间内应对面试、升职测评等艰巨任务打造

11187 学习 · 1614 问题

查看课程