二叉树描述聚类分析谱系图(50)

U

ucg1987

Unregistered / Unconfirmed
GUEST, post messages is not allowed!
#1
1——|_______ 2——| |____ 3------------| | 4-----|___________| 5-----| 上面是一个简单的聚类图谱, 1,2先聚一类,再和3聚一类, 最后和4+5聚一类。二叉树的节点结构定义如下(也可定义为类) :typedef st ruct bit ree node{ st ruct  bit reeNode 3 left Tree ; st ruct  bit reeNode 3 right Tree ; st ruct  bit reeNode 3 prior Tree ;
 int varNumber1 ;//样品号 int varNumber2 ;
//样品号 float nodeDistance ;
//相似系数} 用二叉树描述时有如下四条(类——一个节点):(1) 如果选出的一对样品不在已划分的类型中,则合并该对样品组成新类;[red](2) 如果选出的一对样品有一个已在划分的类型中,则另一个样品归入该类;
[/red](3) 如果选出的一对样品分别在已划分的两类中,则将两类组成新类;(4) 如果选出的一对样品出现在已划分的一类中,则不再分类. 按上述方法,先把1+2 开辟一个节点, 4+5开辟一个节点, (1+2)and3 和 ((1+2)+3)and (4+5) 是怎么操作的?
 
W

wangdonghai

Unregistered / Unconfirmed
GUEST, post messages is not allowed!
#2
楼主要的效果是不是这样的呀: 12345 / / 123 45 / / / / 12 3 4 5 / / 1 2 ...implementation{$R *.dfm}type PSBTree=^TSBTree;
TSBTree=record Data:string;
Left,Right:pSBTree;
end;
function CreateNode(const Data:string):pSBTree;
begin
New(result);
result.Data:=Data;
result.Left:=nil;
result.Right:=nil;
end;
function CombineNode(const NodeA,NodeB:pSBTree):pSBTree;
begin
New(result);
result.Data:=NodeA.Data+NodeB.Data;
result.Left:=NodeA;
result.Right:=NodeB;
end;
procedure BackOrder(p:pSBTree;var s:string);
begin
if p<>nil then
begin
BackOrder(p.Left,s);
BackOrder(p.Right,s);
s:=s+p.Data+' ';
end;
end;
procedure TForm1.Button1Click(Sender: TObject);var Node1,Node2,Node12,Node3,Node123,Node4,Node5,Node45,Node12345:pSBTree;
s:string;
begin
Node1:=CreateNode('1');
Node2:=CreateNode('2');
Node12:=CombineNode(Node1,Node2);
Node3:=CreateNode('3');
Node123:=CombineNode(Node12,Node3);
Node4:=CreateNode('4');
Node5:=CreateNode('5');
Node45:=CombineNode(Node4,Node5);
Node12345:=CombineNode(Node123,Node45);
s:='';
Memo1.Clear;
BackOrder(Node12345,s);
Memo1.Lines.Add(s);
end;
 
Top Bottom