用C#实现数据结构--树(二)

本文探讨了树数据结构的多种遍历策略,包括宽度优先、先序、中序和后序深度优先遍历。通过定义不同的访问者类,如PreOrder、InOrder和PostOrder,实现了对树节点的灵活访问。同时,介绍了使用队列进行节点收集的枚举访问者(EnumVisitor),并展示了如何根据遍历类型选择合适的访问者进行树遍历。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

         public class InOrder:IPrePostVisitor
         
{
              
private IVisitor visitor;

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

              
IPrePostVisitor 成员#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;}

              
IPrePostVisitor 成员#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;

              }


              
IVisitor 成员#region IVisitor 成员

 

              
public void Visit(object _obj)

              
{

                   
// TODO:  添加 EnumVisitor.Visit 实现

                   
this.thisQueue.Enqueue(_obj);

              }

              
#endregion

        }


 

 

 

 

         
IEnumerable 成员#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


 ——来自:www.sinory.com

转载于:https://www.cnblogs.com/hjzhang/archive/2005/07/25/2043608.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值