template class Tree { T *_value; Tree *_left; Tree *_right; Tree *_root; Tree(T *value); Tree(const Tree&); Tree& operator=(const Tree&); public: Tree(); ~Tree(); T& getValue(); int getDepth(); template friend ostream& operator<<(ostream&, const Tree&); Tree& operator+=(T*); class TreeIterator { Tree *_prev; Tree *_next; public: TreeIterator(Tree *tree); bool hasNext(); T& next(); }; TreeIterator& getIterator() { TreeIterator *ti = new TreeIterator(this); return *ti; } };