數(shù)據(jù)結(jié)構(gòu)與算法(C#實現(xiàn))系列---演示篇(三)
2024-07-21 02:19:58
供稿:網(wǎng)友
數(shù)據(jù)結(jié)構(gòu)與算法(c#實現(xiàn))系列---樹(二)
heavenkiller(原創(chuàng))
public class inorder:iprepostvisitor
{
private ivisitor visitor;
public inorder(ivisitor _vis){visitor=_vis;}
#region iprepostvisitor 成員
public void previsit(object _obj)
{
// todo: 添加 inorder.previsit 實現(xiàn)
}
public void visit(object _obj)
{
// todo: 添加 inorder.visit 實現(xiàn)
this.visitor.visit(_obj);
}
public void postvisit(object _obj)
{
// todo: 添加 inorder.postvisitor 實現(xiàn)
}
#endregion
}
public class postorder:iprepostvisitor
{
private ivisitor visitor;
public postorder(ivisitor _vis){visitor=_vis;}
#region iprepostvisitor 成員
public void previsit(object _obj)
{
// todo: 添加 postorder.previsit 實現(xiàn)
}
public void visit(object _obj)
{
// todo: 添加 postorder.visit 實現(xiàn)
}
public void postvisit(object _obj)
{
// todo: 添加 postorder.postvisitor 實現(xiàn)
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 實現(xiàn)
this.thisqueue.enqueue(_obj);
}
#endregion
}
#region ienumerable 成員
public ienumerator getenumerator()
{
// todo: 添加 tree.getenumerator 實現(xiàn)
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