老师这里 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); }
00 -
liuyubobobo
2020-07-28
如果只是单纯地删除最小值,removeMin 的递归是一个单词递归的过程。这里的代码只是为了返回删除的最小值是谁,先调用了一下 minimum。
确实可以在 removeMIn 的过程中,删除的时候记录最小值是谁。不过课程中为了最大化复用已经有的代码,直接使用 minimum 的代码求出了最小值。
继续加油!:)
00
相似问题