class B{
public: int metritis;
private: node * ptr;
public:
void func() override {
this->ptr=findwhat(this->ptr,metritis);
}
node * findwhat(node *p, int & metritis){......}
} What I want is to find a way to access all the pointers followed by p in order to print the contents of a duplicate avl tree using my one ( as asked in my assignment) iterator.
class TreeIteratorImpl : public Iterator<T>::Impl {
private:
typedef typename Iterator<T>::Impl Impl;
public:
Impl *clone() const override { return new TreeIteratorImpl(ptr); }
T &access() const override { return ptr->data; }
int metritis;
//node *metr; metr->data=0;
void advance() override {
//int * metritis; cout<<metritis;
//int metritis=metr->data;
this->ptr=findwhat(this->ptr,metritis);
}
node *findwhat(node *p,int &metritis)
{
if(p==nullptr){
metritis=0; return nullptr;
}
if(p->counter>1&&(metritis==1))
{
metritis=2; p->visited=2; return p;
}
else if (p->right != nullptr)
{
p = leftdown(p->right);
if(p!=nullptr)
{ //cout<<"B";
int v=p->counter;
if(v==2)
{ //cout<<"C";
p->visited=1;metritis++;p->visited++; //cout<<"HIHI";
return p;
}
return p;
}
}
else
{
p = leftup(p);
if(p!=nullptr)
{ //cout<<"D";
int v=p->counter;
if(v==2)
{ //cout<<"E";
p->visited=1;metritis++;p->visited++; //cout<<this->ptr->visited; //cout<<"popo";
return p;
}
return p;
}
}
}
bool equal(const Impl &i) const override {
return ptr == ((TreeIteratorImpl *)&i)->ptr;
}
TreeIteratorImpl(node *p) : ptr(p) {}
protected:
node *ptr;
friend class avltree<T>;
};
THis prints all the iterators twice expcept from the leftleft bottom child. How can I correct it?