数据结构与算法(c#实现)系列---n叉树(二)
heavenkiller(原创)
public override uint degree
{
get
{
return this.degree;
}
}
//只用于空树结点
public virtual void attachkey(object _obj)
{
if(!isempty())
throw new exception("my:this node must be a empty tree node!");
this.key=_obj;
this.treelist=new arraylist();//产生一个degree长的数组,并将其初始化为空树
this.treelist.capacity=(int)this.degree;
for(int i=0;i<this.degree;i++)
{
treelist.add(new narytree(this.degree));
}
/*
foreach(object tmpobj in this.treelist)
{
tmpobj=new narytree(this.degree);
}
*/
}
//只用于叶子结点,将叶子结点变为一个空结点,并返回叶子结点关键字的引用
public virtual object detachkey()
{
if(!isleaf())
throw new exception("my:this node must be a leaf node!");
object result=this.key;//store this leaf node temporary
this.key=null;
this.treelist=null;
return result;
}
//将子树连接到指定树的第num个结点上,前提是这个结点必须是空结点,并且度数相同,否则抛出异常
public virtual void attachsubtree(uint num,narytree _narytree)
{
if(this.isempty())
throw new exception("my:it can't be a empty tree!");
if(!(this[num-1].isempty()) this.degree!=_narytree.degree )
throw new exception("my:this[i-1] must be empty and they should have the same degree!");
this[num-1]=_narytree;
}
//仅为非空树定义,从给定树中删去它的第i棵子树并连上一个空树,度数相同,并且返回删除的子树引用
public virtual narytree detachsubtree(uint num)
{
if (isempty())
throw new exception("my:it can't be empty! ");
narytree tmptree=this;
((narytree)this[num-1]).key=null;
((narytree)this[num-1]).treelist=null;
return this;
}
}
}
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器