数据结构与算法(C#实现)系列---N叉树(二)

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

}

//----------------------------------------------------------------------------------

}

}

Published At
Categories with Web编程
Tagged with
comments powered by Disqus