广义树和基本树的主要区别就是有任意的度.
using System;
using System.Collections;
namespace DataStructure

{
     
/// <summary>

     
/// GeneralTree 的摘要说明。

     
/// general tree is a tree which has a arbitrary degree and no empty tree

     
/// use ArrayList to replace ListAsLinkedList 

     
/// </summary>


     
public class GeneralTree:Tree

     
{

         
protected object key=null;

         
protected uint degree=0;

         
//protected uint height=0;

         
protected ArrayList treeList=new ArrayList();


         
public GeneralTree(object _objKey)

         
{

              
//

              
// TODO: 在此处添加构造函数逻辑

              
//

              key
=_objKey;

              degree
=0;

         
//   height=0;

              ArrayList treeList
=new ArrayList();

         }



         
public virtual void AttackSubtree(GeneralTree _gTree)

         
{

              
this.treeList.Add(_gTree);

              
++degree;

         }


         
public virtual GeneralTree DetachSubtree(GeneralTree _gTree)

         
{

             
this.treeList.Remove(_gTree);

              degree
--;

              
return _gTree;//?????  how to remove ,reference or object????

         }


         
public override Tree this[uint _index]

         
{

              
get

              
{

                   
if(_index>=this.degree)

                       
throw new Exception("my:out of index");

                   
return (Tree)treeList[(int)_index];

              }


              
set

              
{
                   treeList[(
int)_index]=value;

              }

         }

         
public override object Key get return this.key; } }

         
public override uint Degree get return this.degree; } }

         
//public  override uint Height{get{return this.height;}}


         
public override bool IsEmpty()// property takes the place of IsEmpty()
         {
             
return false;//generaltree won't be empty for ever
         }

         
public override bool IsLeaf()
         
{
             
return this.degree == 0;//if this tree's degree is zero, it means the tree has no subtrees, so it is leaf certainly

         }


         
//overwrite Object.Equals() ---  reference  type   realization

         
public override bool Equals(object _obj)
         
{

             
if (!base.Equals(_obj))

                 
return false;//基类比较不相等,则不相等

             
//基类中的一些条目在此可免去 

             
//在基类中已判定其为GeneralTree类型,故转型不会失败

             GeneralTree tmpTree 
= (GeneralTree)_obj;

             
//比较引用成员

             
if (!Object.Equals(this.treeList, tmpTree.treeList))

                 
return false;

             
//比较值类型成员

             
return true;

         }


     }


 }
posted on 2006-05-10 20:08  我是誰  阅读(212)  评论(0)    收藏  举报