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[i].Node:=Node;
a[i].Layer:=0;
while a[i].Node< > nil do
begin
Node:=a[i].Node.Getfirstchild;//取其第一个子结点
while Node < > nil do
begin
j:=j+1;
a[j].Node:=Node;
a[j].Layer:=a[i].Layer+1; //此结点所在的层数
Node:=Node.GetNextSibling;
end;//如此循环,以取出此层所有结点
i:=i+1;
end;
i:=0;
while a[i].node< > nil do
begin
if a[i].Layer> Depth then
Depth:=a[i].Layer;//求最大的层数,即子树深度
listbox1.Items.Add(a[i].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('您没选择任何结点');//如果没选择任何结点则显示此句