【发布时间】:2019-09-24 17:52:13
【问题描述】:
我有一个二叉搜索树实现,其中树的每个节点都有这种结构。
struct node {
T data;
std::unique_ptr<node> left, right;
node(T data): data(data), left(nullptr), right(nullptr) {}
};
我已经实现了一个findmin 例程,它返回最小数据(最左边节点的数据),给定树的根。目前我已经递归实现了。
template<typename T>
T Btree<T>::_findmin(std::unique_ptr<node>& curr)
{
if (curr && curr->left == nullptr)
return curr->data;
return _findmin(curr->left);
}
这可行,但我想迭代地实现它。对于一个普通的指针,我们可以赋值,然后一直遍历最左边的节点curr = curr->left,但是这样的赋值对于unique_ptr是行不通的。
有没有办法迭代地实现它?
【问题讨论】:
-
unique_ptr 转让所有权。您仍然可以拥有指向节点的本机指针以进行迭代:_findmin(const node* curr) 而不是 _findmin(std::unique_ptr
)。使用 unique_ptr ::get() 获得非拥有指针。
标签: c++ c++11 smart-pointers