数据结构与算法 (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 ;
}
//----------------------------------------------------------------------------------
}
}