广义树和基本树的主要区别就是有任意的度.
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;

}

}

}
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;
}
}
}


浙公网安备 33010602011771号