方法如下: 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('您没选择任何结点');//如果没选择任何结点则显示此句
end;
|