求treeview中一个子树的深度和结点数量的方法和代码(50分)

  • 主题发起人 主题发起人 vinger
  • 开始时间 开始时间
V

vinger

Unregistered / Unconfirmed
GUEST, unregistred user!
求treeview中一个子树的深度和结点数量的方法和代码,请大家赐教,告诉我该怎么做,最好能给我发一下CODE。先行谢过。致礼! grandvisor@263.net
 
用TreeNode的Data属性指向自定义类型指针,遍历树有很多方法,
我想不难,自己做吧.
 
treeview.nodes.count属性就是节点数目,
var deepth,i:integer;
begin
deepth:=0;
for i:=0 to treeview.nodes.count-1do

if treeview.nodes.level>deepth then
deepth:=treeview.nodes.level;
end;
 
方法如下:
procedure TForm1.Button2Click(Sender: TObject);
type
Nodesum=record
Node:TTreenode;
//结点
Layer:Integer;
//所在层
end;
var
a:array of Nodesum;
Node:TTreenode;
Depth,i,j:Integer;
begin
Depth:=0;
i:=0;
j:=0;
Listbox1.Items.Clear;
Setlength(a,Treeview1.Items.Count);
Node:=Treeview1.Selected;
//使顶结点为您所选择的结点
a.Node:=Node;
a.Layer:=0;
while a.Node<> nildo
begin
Node:=a.Node.Getfirstchild;//取其第一个子结点
while Node <> nildo
begin
j:=j+1;
a[j].Node:=Node;
a[j].Layer:=a.Layer+1;
//此结点所在的层数
Node:=Node.GetNextSibling;
end;
//如此循环,以取出此层所有结点
i:=i+1;
end;
i:=0;
while a.node<>nil do
begin
if a.Layer>Depth then
Depth:=a.Layer;//求最大的层数,即子树深度
listbox1.Items.Add(a.Node.Text);
i:=i+1;
end;
If a[0].Node<>nil then
begin
listbox1.Items.Add('子树结点共有: '+inttostr(i-1));//不含最上层结点
listbox1.Items.Add('了树深度为: '+inttostr(Depth));
end
else
listbox1.Items.Add('您没选择任何结点');//如果没选择任何结点则显示此句
end;
 
接受答案了.
 
后退
顶部