16,748
社区成员
发帖
与我相关
我的任务
分享
const
Tnil=0;
type
Pnode=Integer;
Tnode=packed record
pF,pS,pN:Pnode; //father,first son,next
//level,index:Integer;
//count:Integer;
dataIni:String; //可以放一个字符串,也可以放:a=123;b=xyz;c=... Ttreenode没这个只有data,经常要分配空间
dataInt:Integer;
bFree:Boolean;
end;
Ttree=class
private
nodes:array of Tnode; //[0]==nil; [1..n]
i0free:Integer; //它之前的单元都使用了
procedure useNode(p:Pnode); //初始化一个单元节点
procedure freeNode(p:Pnode); //释放一个单元节点
function newNode:Pnode; //取得一个可用的单元节点
public
constructor create;
destructor destroy; override;
procedure packdata; //使得空间与 实际使用单元数 一致,没有任何浪费 -尚未实现
function NodeAddBrother(p:Pnode):Pnode; //为p增加一个弟节点
function NodeAddSonLast(p:Pnode):Pnode; //为p增加一个子节点,作为最小的儿子
function NodeAddSonFirst(p:Pnode):Pnode; //为p增加一个子节点,作为最大的儿子
procedure NodeDelete(p:Pnode); //删除节点p,及其所有的各级子节点
procedure NodeMoveSon(f,t:Pnode); //把节点f搬移作为节点t的最小的子节点
procedure NodeMoveOver(f,t:Pnode); //把节点f搬移作为节点t的最小的哥节点
function NodeRoot:Pnode; //第一层(根)第一个节点
function NodeSon(p:Pnode;i:Integer):Pnode; //取得p的第i个儿子(从0算起)
function NodeLevel(p:Pnode):Integer; //取得p的层次级别(从1算起)
function NodeSonCount(p:Pnode):Integer; //取得p的儿子数量
function NodeSonCountAll(p:Pnode):Integer; //取得p的各级子节点数量
function NodeBrotherUp(p:Pnode):Pnode; //取得p的最小的哥节点
function NodeBrotherDown(p:Pnode):Pnode; //取得p的最大的弟节点
function NodeFather(p:Pnode):Pnode; //取得p的父节点
function NodeIni(p:Pnode):String; //取节点的字符串内容
function NodeInt(p:Pnode):Integer; //取节点的整数内容
procedure NodeSetIni(p:Pnode;s:String); //设置节点的字符串内容
procedure NodeSetInt(p:Pnode;i:Integer); //设置节点的整数内容
end;
const
Tnil=0;
type
Tnode=packed record
pF,pS,pN:Integer; //father,son,next
//count:Integer;
dataStr:String;
dataInt:Integer;
bFree:Boolean;
end;
Ttree=class
private
nodes:array of Tnode; //[0]==nil; [1..n]
i0free:Integer;
procedure useNode(p:Integer);
procedure freeNode(p:Integer);
function newNode:Integer;
procedure initnode(p: Integer);
public
constructor create;
destructor destroy;
procedure packdata;
function NodeAddBrother(p:Integer):Integer;
function NodeAddSonLast(p:Integer):Integer;
function NodeAddSonFirst(p:Integer):Integer;
procedure NodeDelete(p:Integer);
procedure NodeMoveSon(f,t:Integer);
function NodeSon(p,i:Integer):Integer;
function NodeSonCount(p:Integer):Integer;
function NodeSonCountAll(p:Integer):Integer;
function NodeSonUp(p:Integer):Integer;
function NodeSonDown(p:Integer):Integer;
function NodeFather(p:Integer):Integer;
end;