亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? treeiter.h

?? 包含常見的數據結構的類和函數
?? H
字號:
#include <bintree.h>
#include <stack.h>
#include <queue.h>
#include <process.h>

template <class Type> class TreeIterator{
  public:
    TreeIterator(const BinaryTree<Type> & BT):T(BT),current(NULL){}
    virtual ~TreeIterator(){}
    virtual void First()=0;
    virtual void operator ++ ()=0;
    int operator + () const {return current!=NULL;}
    const Type  operator()()const;
  protected:
    const BinaryTree<Type>  T;
    const BinTreeNode<Type> * current;
  private:
    TreeIterator(const TreeIterator<Type> & ){}
    const TreeIterator<Type> & operator = (const TreeIterator<Type> &);
    };

  template<class Type> const Type  TreeIterator<Type>::operator()()const{
    if(current==NULL){
      cerr<<"Illegal access"<<endl;
      exit(1);
      }
    return current->GetData();
    }

template <class Type> struct stkNode{
  const BinTreeNode<Type> * Node;
  int PopTim;
  stkNode(const BinTreeNode<Type> * N=NULL):Node(N),PopTim(0){}
  };

template <class Type> class PostOrder:public TreeIterator<Type>{
  public:
    PostOrder(const BinaryTree<Type> & BT);
    ~PostOrder(){}
    void First();
    void operator ++();
  protected:
    Stack <stkNode<Type> > st;
    };

  template <class Type> PostOrder<Type>::PostOrder(const BinaryTree<Type> & BT):
	TreeIterator<Type>(BT){
    st.Push(stkNode<Type>(BT.GetRoot()));
    }

  template <class Type> void PostOrder<Type>::First(){
    st.MakeEmpty();
    if(T.GetRoot()!=NULL) st.Push(stkNode<Type> (T.GetRoot()));
    operator ++();
    }

  template <class Type> void PostOrder<Type>::operator ++(){
    if(st.IsEmpty()){
      if(current==NULL){
	cerr<<"Advanced past end"<<endl;
	exit(1);
	}
      current=NULL;
      return;
      }
    stkNode<Type> Cnode;
    for(;;){
      Cnode=st.Pop();
      if(++Cnode.PopTim==3){
	current=Cnode.Node;
	return;
	}
      st.Push(Cnode);
      if(Cnode.PopTim==1){
	if(Cnode.Node->GetLeft()!=NULL)
	  st.Push(stkNode<Type> (Cnode.Node->GetLeft()));
	  }
	  else{
	    if(Cnode.Node->GetRight()!=NULL)
	      st.Push(stkNode<Type> (Cnode.Node->GetRight()));
	      }
	    }
	  }

template<class Type> class InOrder:public PostOrder<Type>{
  public:
    InOrder(BinaryTree<Type> & BT):PostOrder<Type> (BT){}
    void First();
    void operator ++();
    };


  template<class Type> void InOrder<Type>::First(){
    st.MakeEmpty();
    if(T.GetRoot()!=NULL) st.Push(stkNode<Type>(T.GetRoot()));
    operator ++();
    }

  template <class Type> void InOrder<Type>::operator ++(){
    if(st.IsEmpty()){
      if(current==NULL){
	cerr<<"Advanced past end"<<endl;
	exit(1);
	}
      current=NULL;
      return;
    }
    stkNode<Type> Cnode;
    for(;;){
      Cnode=st.Pop();
      if(++Cnode.PopTim==2){
	current=Cnode.Node;
	if(Cnode.Node->GetRight()!=NULL)
	  st.Push(stkNode<Type>(Cnode.Node->GetRight()));
	return;
	}
      st.Push(Cnode);
      if(Cnode.Node->GetLeft()!=NULL)
	st.Push(stkNode<Type>(Cnode.Node->GetLeft()));
      }
    }


template <class Type> class PreOrder:public TreeIterator<Type>{
  public:
    PreOrder(const BinaryTree<Type> & BT);
    ~PreOrder(){}
    void First();
    void operator ++();
  protected:
    Stack<const BinTreeNode<Type> * > st;
    };

  template <class Type> PreOrder<Type>::PreOrder(const BinaryTree<Type> & BT):
    TreeIterator<Type>(BT){
      st.Push(BT.GetRoot());
      }

  template <class Type> void PreOrder<Type>::First(){
    st.MakeEmpty();
    if(T.GetRoot())st.Push(T.GetRoot());
    operator ++();
    }

  template <class Type> void PreOrder<Type>::operator ++(){
    if(st.IsEmpty()){
      if(current==NULL){
	cerr<<"Advanced past end"<<endl;
	exit(1);
	}
      current=NULL;
      return;
      }
    current=st.Pop();
    if(current->GetRight()!=NULL) st.Push(current->GetRight());
    if(current->GetLeft()!=NULL) st.Push(current->GetLeft());
    return;
    }

template <class Type> class LevelOrder:public TreeIterator<Type>{
  public:
    LevelOrder(const BinaryTree<Type> & BT);
    ~LevelOrder(){}
    void First();
    void operator ++();
  protected:
    Queue<const BinTreeNode<Type> * > qu;
    };

  template <class Type> LevelOrder<Type>::LevelOrder(const BinaryTree<Type> & BT):
    TreeIterator<Type>(BT){qu.EnQueue(BT.GetRoot());}


  template <class Type> void LevelOrder<Type>::First(){
    qu.MakeEmpty();
    if(T.GetRoot()) qu.EnQueue(T.GetRoot());
    operator ++();
    }

  template <class Type> void LevelOrder<Type>::operator ++(){
    if(qu.IsEmpty()){
      if(current==NULL){
	cerr<<"Advanced past end"<<endl;
	exit(1);
	}
      current=NULL;
      return;
      }
    current=qu.DeQueue();
    if(current->GetLeft()!=NULL) qu.EnQueue(current->GetLeft());
    if(current->GetRight()!=NULL) qu.EnQueue(current->GetRight());
    }



void main(){
  BinaryTree<int> bt;
  cin>>bt;
  PostOrder<int> btpostorder(bt);
  btpostorder.First();
  cout<<"now,postorder:\n";
  while(+btpostorder){
    cout<<btpostorder()<<' ';
    ++btpostorder;
    }
  cout<<endl;
  InOrder<int> btinorder(bt);
  btinorder.First();
  cout<<"now,inorder:\n";
  while(+btinorder){
    cout<<btinorder()<<' ';
    ++btinorder;
    }
  cout<<endl;
  PreOrder<int> btpreorder(bt);
  btpreorder.First();
  cout<<"now,preorder:\n";
  while(+btpreorder){
    cout<<btpreorder()<<' ';
    ++btpreorder;
    }
  cout<<endl;
  LevelOrder<int> btlevelorder(bt);
  btlevelorder.First();
  cout<<"now,levelorder:\n";
  while(+btlevelorder){
    cout<<btlevelorder()<<' ';
    ++btlevelorder;
    }
  cout<<endl;
  }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一卡二卡欧美日韩| 国产美女一区二区| 精品一区二区三区欧美| 成人精品免费网站| 91国产成人在线| 久久综合中文字幕| 爽爽淫人综合网网站| eeuss鲁片一区二区三区在线观看 eeuss鲁片一区二区三区在线看 | 欧美日韩一区二区三区四区五区 | 欧美精品777| 国产精品情趣视频| 强制捆绑调教一区二区| 在线视频你懂得一区| 中国色在线观看另类| 九九九久久久精品| 91精品国产一区二区人妖| 亚洲卡通动漫在线| www.久久精品| 中文av字幕一区| 懂色av一区二区三区免费看| 亚洲精品一线二线三线| 日本中文一区二区三区| 欧美日韩精品欧美日韩精品一 | 麻豆91精品91久久久的内涵| 欧美亚洲自拍偷拍| 亚洲免费在线视频一区 二区| 国产91综合一区在线观看| 欧美电视剧在线看免费| 毛片av一区二区三区| 欧美精品1区2区3区| 日韩激情av在线| 欧美军同video69gay| 无码av免费一区二区三区试看| 欧美性生活大片视频| 亚洲国产另类av| 在线免费观看视频一区| 亚洲国产精品人人做人人爽| 欧美午夜理伦三级在线观看| 亚洲午夜一二三区视频| 欧美日韩国产成人在线91| 视频一区免费在线观看| 制服.丝袜.亚洲.中文.综合| 日本最新不卡在线| 精品国产电影一区二区| 国产精品一级在线| 国产精品美女久久久久久久久| 99久久精品国产一区| 亚洲伊人色欲综合网| 精品视频在线免费观看| 日韩高清在线一区| 久久久九九九九| 99re这里都是精品| 日韩国产一区二| 日韩欧美国产一二三区| 国产69精品一区二区亚洲孕妇| 亚洲欧美综合网| 欧美日韩美女一区二区| 精品一区二区三区影院在线午夜 | 精品亚洲aⅴ乱码一区二区三区| 精品国产91乱码一区二区三区| 国产成人av一区二区三区在线 | 中文字幕av不卡| 在线观看欧美黄色| 免费欧美在线视频| 国产精品福利av| 欧美日韩日日摸| 国产一区二区福利| 亚洲成人久久影院| 久久久精品综合| 欧美日韩精品免费| 成人美女视频在线看| 亚洲福利一区二区三区| 国产丝袜欧美中文另类| 97精品久久久久中文字幕 | 欧美大片国产精品| 色偷偷一区二区三区| 精品影视av免费| 一区二区三区不卡视频| 久久九九久精品国产免费直播| 欧美三级电影网| 成人国产精品免费观看视频| 美女网站在线免费欧美精品| 中文字幕中文字幕中文字幕亚洲无线 | 亚洲美女电影在线| 精品成人佐山爱一区二区| 91成人在线免费观看| 国产传媒日韩欧美成人| 天天综合天天做天天综合| 欧美激情一区在线观看| 91精品国产91久久综合桃花| 91在线视频观看| 粉嫩在线一区二区三区视频| 日本亚洲一区二区| 亚洲二区在线观看| 亚洲视频一二三区| 久久久99久久| 久久―日本道色综合久久| 欧美精品一二三| 欧美三级视频在线| 色综合中文综合网| 日本sm残虐另类| 一区二区欧美精品| 亚洲乱码国产乱码精品精小说 | 欧美性生活大片视频| 成人av免费在线| 国产1区2区3区精品美女| 裸体健美xxxx欧美裸体表演| 丝袜美腿亚洲一区二区图片| 亚洲综合视频在线观看| 亚洲码国产岛国毛片在线| 国产精品色噜噜| 国产欧美日韩精品一区| 国产亚洲精品精华液| 久久九九影视网| 欧美国产激情二区三区 | 欧美电影免费观看高清完整版 | 韩国v欧美v亚洲v日本v| 蜜臀a∨国产成人精品| 日韩综合小视频| 日韩成人精品在线| 奇米影视在线99精品| 蜜桃免费网站一区二区三区| 久草中文综合在线| 国产在线视频一区二区三区| 狠狠色狠狠色综合| 顶级嫩模精品视频在线看| 91影视在线播放| 欧美在线你懂得| 正在播放亚洲一区| 337p粉嫩大胆色噜噜噜噜亚洲| 久久女同互慰一区二区三区| 国产欧美日韩精品在线| 亚洲男同性恋视频| 午夜在线成人av| 久久不见久久见免费视频7 | 日韩一区在线免费观看| 一区二区三区四区视频精品免费| 亚洲伦在线观看| 日本在线不卡一区| 国产盗摄女厕一区二区三区| 91麻豆国产福利在线观看| 精品视频资源站| 久久男人中文字幕资源站| 亚洲欧美自拍偷拍色图| 日韩av网站免费在线| 国产成人a级片| 欧美日韩高清一区二区不卡| 26uuu精品一区二区| 亚洲欧洲99久久| 麻豆高清免费国产一区| av电影在线观看一区| 9191精品国产综合久久久久久| 久久综合九色综合欧美98| 亚洲色图视频网站| 日本一区中文字幕| 91免费看视频| 久久人人爽人人爽| 亚洲高清三级视频| 国产一区二区三区蝌蚪| 91一区二区在线观看| 91精品免费观看| 亚洲特黄一级片| 久久精品国产澳门| 欧美影视一区在线| 日本一区二区三区视频视频| 视频一区欧美日韩| 91激情五月电影| 久久久亚洲午夜电影| 午夜电影久久久| 91视频.com| 久久久久久亚洲综合| 天堂成人国产精品一区| 丁香婷婷综合网| 久久久亚洲欧洲日产国码αv| 亚洲大片一区二区三区| 成人黄色在线看| 久久久亚洲国产美女国产盗摄| 亚洲国产中文字幕在线视频综合| 国产精品一区在线观看乱码 | 日本午夜一本久久久综合| 91免费国产在线| 国产精品欧美久久久久无广告| 久久国内精品自在自线400部| 欧美视频一二三区| 亚洲午夜在线电影| 91在线你懂得| 中文字幕一区二区视频| 国产精品乡下勾搭老头1| 欧美v日韩v国产v| 日韩 欧美一区二区三区| 欧美色精品在线视频| 一区二区在线电影| 99久久精品久久久久久清纯| 中文字幕在线一区二区三区| 国产精品456露脸| 久久综合久久久久88| 国产一区二区三区电影在线观看 | 亚洲美腿欧美偷拍| 91麻豆自制传媒国产之光| 中文字幕欧美一|