数据结构与算法C#实施系列--树两
Heavenkiller(原创)
公共课为:iprepostvisitor
{
私人ivisitor访客;
公众为(ivisitor _vis){访客= _vis;}
#区iprepostvisitor成员
public void preVisit(对象_obj)
{
添加inorder.previsit / /待办事项:
}
公共无效访问(对象_obj)
{
添加顺序:
this.visitor.visit(_obj);
}
公共无效postvisit(对象_obj)
{
添加inorder.postvisitor / /待办事项:
}
#铁心端部定点
}
公共课的后序:iprepostvisitor
{
私人ivisitor访客;
公序(ivisitor _vis){访客= _vis;}
#区iprepostvisitor成员
public void preVisit(对象_obj)
{
添加postorder.previsit / /待办事项:
}
公共无效访问(对象_obj)
{
添加后序遍历访问 / /待办事项:
}
公共无效postvisit(对象_obj)
{
添加postorder.postvisitor / /待办事项:
this.visitor.visit(_obj);
}
#铁心端部定点
}
保护类:ivisitor enumvisitor
{
队列thisqueue;
公共enumvisitor(队列_que)
{
这thisqueue = _que;
}
#区ivisitor成员
公共无效访问(对象_obj)
{
添加enumvisitor访问 / /待办事项:
This.thisQueue.Enqueue(_obj);
}
#铁心端部定点
}
#区IEnumerable的成员
市民IEnumerator GetEnumerator()
{
添加tree.getenumerator / /待办事项:
enumvisitor可见=新enumvisitor(这个。keyqueue);
开关(这个。traversaltype)
{
traversaltype广度情况:
BreadthFirstTraversal(VIS);
打破;
案例traversaltype.predepth:
序预览=新的序(VIS);
depthfirsttraversal(预览);
打破;
案例traversaltype.indepth:
为了该=新的序(VIS);
depthfirsttraversal(隐形);
打破;
案例traversaltype.postdepth:
后序后期=新的后序(VIS);
depthfirsttraversal(后期);
打破;
违约:
console.writeline(警告:请先设置一个旅游类型!——SetTraversalType(traversaltype无效_type))
抛出新的异常()警告:请先设置一个旅行类型!);如果没有设置。
打破;
}
返回this.keyqueue.getenumerator();
}
#铁心端部定点