老师这里 removeMax 的 minimum 和 removeMin 递归了两次, 有没有一种更好地方法 只递归一次呢, 这种设计接口的考量是什么呢

来源:6-11 删除二分搜索树的最大元素和最小元素

慕侠9157770

2020-07-28

写回答

2回答

慕用0058068

2020-07-30

分享一下我写的只递归一次了的:

T removeMin(Node **node) {

    if ( (*node)->left != nullptr )
        return removeMin( &(*node)->left );
        
    T ret = (*node)->val;
    Node *temp = *node;
    
    if ( (*node)->right != nullptr )
        (*node) = (*node)->right;
    else
        (*node) = nullptr;
        
    delete temp;
    
    return ret;
}


T removeMin() {

    if (root == nullptr)
        return 0;
        
    size--;
    
    return removeMin(&root);
}


0
0

liuyubobobo

2020-07-28

如果只是单纯地删除最小值,removeMin 的递归是一个单词递归的过程。这里的代码只是为了返回删除的最小值是谁,先调用了一下 minimum。


确实可以在 removeMIn 的过程中,删除的时候记录最小值是谁。不过课程中为了最大化复用已经有的代码,直接使用 minimum 的代码求出了最小值。


继续加油!:) 

0
0

玩转数据结构

动态数组/栈/队列/链表/BST/堆/线段树/Trie/并查集/AVL/红黑树…

6221 学习 · 1704 问题

查看课程