資料結構與演算法(C#實現)系列---樹(二) (轉)

themoney發表於2007-09-30
資料結構與演算法(C#實現)系列---樹(二) (轉)[@more@]

  資料結構與演算法(實現)系列---樹(二)

  Heavenkiller(原創)

:namespace prefix = o ns = "urn:schemas--com::office" />

  public class InOrder:IPrePostVisitor

  {

  private IVisitor visitor;

  public InOrder(IVisitor _vis){visitor=_vis;}

  #region IPrePostVisitor 成員

  public void PreVisit( _obj)

  {

    // TODO:  新增 InOrder.PreVisit 實現

  }

  public void Visit(object _obj)

  {

  // TODO:  新增 InOrder.Visit 實現

  this.visitor.Visit(_obj);

  }

  public void PostVisit(object _obj)

  {

  // TODO:  新增 InOrder.PostVisitor 實現

  }

  #endregion

    }

  public class PostOrder:IPrePostVisitor

  {

  private IVisitor visitor;

  public PostOrder(IVisitor _vis){visitor=_vis;}

  #region IPrePostVisitor 成員

  public void PreVisit(object _obj)

  {

  // TODO:  新增 PostOrder.PreVisit 實現

  }

  public void Visit(object _obj)

  {

  // TODO:  新增 PostOrder.Visit 實現

  }

  public void PostVisit(object _obj)

  {

  // TODO:  新增 PostOrder.PostVisitor 實現

  this.visitor.Visit(_obj);

  }

  #endregion

  }

  protected class EnumVisitor:IVisitor

  {

  Queue thisQueue;

  public EnumVisitor(Queue _que)

  {

  this.thisQueue=_que;

  }

  #region IVisitor 成員

  public void Visit(object _obj)

  {

  // TODO:  新增 EnumVisitor.Visit 實現

  this.thisQueue.Enqueue(_obj);

  }

  #endregion

  }

  #region IEnumerable 成員

  public IEnumerator GetEnumerator()

  {

  // TODO:  新增 Tree.GetEnumerator 實現

  EnumVisitor vis=new EnumVisitor(this.keyqueue);

  switch (this.traversaltype)

  {

  case TraversalType.Breadth:

  BreadthFirstTraversal(vis);

    break;

  case TraversalType.PreDepth:

  PreOrder preVis=new PreOrder(vis);

  DepthFirstTraversal(preVis); 

  break;

  case TraversalType.InDepth:

  InOrder inVis=new InOrder(vis);

  DepthFirstTraversal(inVis); 

  break;

    case TraversalType.PostDepth:

  PostOrder postVis=new PostOrder(vis);

  DepthFirstTraversal(postVis); 

  break;

 

  default:

  Console.WriteLine("WARNING:please set a travel type first!--void SetTraversalType(TraversalType _type) ");

  //throw new Exception("WARNING:please set a travel type first!");//if not set a type, a exception will happen

  break;

  }

  return this.keyqueue.GetEnumerator();

  }

  #endregion

 

 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10794571/viewspace-974268/,如需轉載,請註明出處,否則將追究法律責任。

相關文章