如何取得treeview某节点下的所有子孙节点

hontim 2005-12-27 12:31:01
如何取得treeview某节点下的所有子孙节点
...全文
215 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Blakhawk 2005-12-29
  • 打赏
  • 举报
回复
递归吧
sdqhlyf 2005-12-29
  • 打赏
  • 举报
回复
还挺复杂。
hontim 2005-12-29
  • 打赏
  • 举报
回复
怎么递归,来段代码如何?
youcheng1 2005-12-29
  • 打赏
  • 举报
回复
treeview中一个子树的深度和结点数量的方法和代码

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;

5,379

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧