方法如下:
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;