二进制搜索树的正向迭代器中的operator ++

时间:2018-07-08 13:38:31

标签: c++ iterator binary-search-tree inorder const-iterator

我正在尝试实现一个增量运算符(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”传递给找到其后继函数的函数时,在编译时出现错误:“无法在没有对象的情况下调用成员函数”。

如果有人知道解决此问题的方法,请告诉我。

0 个答案:

没有答案