我正在尝试实现一个增量运算符(operator ++)来迭代BST(按顺序遍历),但是每次尝试转到父节点时都会遇到问题。这就是我定义节点结构[这是一个类模板]的方法。
struct node{
T value; //Template
node *left; //pointer to the left child
node *right; /pointer to the right child
node() : left(0) , right(0) {}
node(const T &v, node *l = 0 , node *r = 0)
: value(v), left(l) , right(r) {}
}; node * _root;
迭代器从左侧的最小子项开始
const_iterator begin() const {
return const_iterator(FindSmallestPrivate(_root));}
,它在指向空值时结束
const_iterator end() const {
return const_iterator(0);}
const_iterator类的一部分
class const_iterator {
const node *n;
public:
typedef std::forward_iterator_tag iterator_category;
typedef T value_type;
typedef ptrdiff_t difference_type;
typedef const T* pointer;
typedef const T& reference;
const_iterator() : n(0)){
}
const_iterator(const const_iterator &other) : n(other.n){
}
const_iterator& operator=(const const_iterator &other) {
n = other.n;
return *this;
}
~const_iterator() {
n = 0;
}
现在我仍然无法解决的主要问题是:
const_iterator operator++(int) {
const_iterator tmp(*this);
/**
starting from the smallest key and base on a given case
it should points to the next smallest key (successor)
and so on until it finds there are no more keys in the tree.
*/
return *this;
}
我尝试了许多方法来使用迭代器类中的辅助函数来找到解决方案,但仍然调用一个函数来查找给定节点的后继者,该节点在BST类中仍然可以正常运行。 当我尝试将“ n”传递给找到其后继函数的函数时,在编译时出现错误:“无法在没有对象的情况下调用成员函数”。
如果有人知道解决此问题的方法,请告诉我。