后序遍历的迭代器 遍历二叉树: Tree Iterator后序的实现 template <class Type>struct StNode const BinaryNode<Type >*k Node int TimesPop StNode( const Binary Node <Type > N=NULL ) Node(N), Times Pop(0)( template <class Type >class Postorder: public TreeIterator< Type >i publlc Postorder( const Binary Tree< Type >&R) Postorder() void first //后序遍历时的第一个结点的地址。 void operator++();//后序遍历时的下一个结点的地址 protected Stack< StNode<Type>>s template <class Type> Postorder<Type>:: Postorder(const Binary Tree<Type>&R): TreeIterator<Type>(R) S Push( StNode<Type>(T. Getroot())); j template <class Type void postorder<Type>: First(){//得到第一个访问的结点地址 s. MakeEmpty ( if( T Getroot())s push( StNode<Type>( T Getroot()) operator ++() /根结点地址及标志0进栈,去寻找第一个被访问的最左方的叶子后序遍历的迭代器 • 遍历二叉树:Tree Iterator 后序的实现 template <class Type> struct StNode { const BinaryNode<Type > * Node; int TimesPop; StNode( const BinaryNode <Type > * N = NULL ): Node(N), TimesPop(0) { } }; template <class Type> class Postorder : public TreeIterator < Type > { public: Postorder( const BinaryTree < Type > & R ); ~Postorder( ) { } void First( ); // 后序遍历时的第一个结点的地址。 void operator ++ ( ); // 后序遍历时的下一个结点的地址。 protected: Stack < StNode<Type> > s; }; template <class Type> Postorder<Type> :: Postorder(const BinaryTree<Type> & R) : TreeIterator<Type> (R) { s.Push( StNode<Type>( T.Getroot( ) ) ); } template <class Type> void Postorder <Type> :: First ( ) { // 得到第一个访问的结点地址 s.MakeEmpty ( ); if ( T.Getroot( ) ) s.push ( StNode<Type>( T.Getroot( ) ); operator ++ ( ); } // 根结点地址及标志 0 进栈,去寻找第一个被访问的最左方的叶子