数据结构与算法(C#实现)系列---树(二)
Heavenkiller(原创)
public class InOrder:IPrePostVisitor
{
private IVisitor visitor;
public InOrder(IVisitor _vis){visitor=_vis;}
#region IPrePostVisitor 成员
public void PreVisit(object _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
查看 http://www.qqread.com/data-structure/u432496010.html相关专题
- 探析C#文件方式读写结构体 (13次浏览)
- C#变得越来越臃肿是不可避免的? (7次浏览)
- C#与EXCEL的数据交互(一) (5次浏览)
- C# 3.0新特性之扩展方法 (1次浏览)
- 利用 C# 实现任务栏通知窗口 (0次浏览)
- 深入C#学习系列之不可小瞧的using关键字 (0次浏览)
- 如何用.NET技术在线生成网站LOGO (0次浏览)
- C#实现遗传算法 模拟花朵的进化 (0次浏览)
- c#里的运算符重载 (0次浏览)
- QTP调用自己开发的.net类库 (0次浏览)



