一种非递归生成树的算法
来源:互联网 发布:macbook剪辑视频软件 编辑:程序博客网 时间:2024/06/07 19:45
这里以这样的树为例:
根
a
a1
a2
b
b1
b2
c
c1
c2
c2d
创建数据库:
CREATE TABLE [Tree] ( [ID] [bigint] IDENTITY (1, 1) NOT NULL ,
[Name] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
--这里仅比楼主的例子多了名称列,为了看起来方便。
[PID] [bigint] NULL ,
[showLevel] [tinyint] NULL ,
CONSTRAINT [PK_Tree] PRIMARY KEY CLUSTERED
(
[ID]
) ON [PRIMARY]
) ON [PRIMARY]
GO
插入数据内容为
ID Name PID ShowLevel
1 根节点 0 1
2 a 1 1
3 b 1 2
4 c 1 3
5 a1 2 1
6 a2 2 2
7 b1 3 1
8 b2 3 2
9 c1 4 1
10 c2 4 2
11 c2d 10 1
编程:使用一个Button,一个ListView,全部是默认的属性
在Button中的OnClick事件中写如下代码
procedure TForm1.Button1Click(Sender: TObject);
var
i,j:integer;
Cnt:Integer;
PID:Integer;
RootNode:TTreeNodes;
TreeNodes:Array of TTreeNode;
CurrNode:TTreeNode;
begin
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('Select * from Tree order by pid,ShowLevel'); //排序至关重要
ADOQuery1.Open;
Cnt:=ADOquery1.RecordCount;
SetLength(TreeNodes,Cnt);
RootNode:=TreeView1.Items;
//节点信息赋值
for i:=0 to Cnt-1 do
begin
ADOQuery1.RecNo:=i+1;
PID:=AdoQuery1.fieldByName('PID').AsInteger;
if PID=0 then
begin
//根节点
TreeNodes[i]:=TreeView1.Items.Add(nil,ADOQuery1.FieldByname('Name').AsString);
TreeNodes[i].Data:=Pointer(ADOQuery1.FieldByName('ID').AsInteger);
end
else
begin
//子节点
//查找索引值
for j:=0 to Treeview1.Items.Count-1 do
begin
if Int64(Treeview1.Items[j].Data)=PID then
begin
CurrNode:=TreeView1.Items[j];
end;
end;
//TreeNodes[i]:=TreeView1.Items.AddChild(TreeNodes[PID-1],ADOQuery1.FieldByname('Name').AsString);
TreeNodes[i]:=TreeView1.Items.AddChild(CurrNode,ADOQuery1.FieldByname('Name').AsString);
TreeNodes[i].Data:=Pointer(ADOQuery1.FieldByName('ID').AsInteger);
end;
end;
end;
- 一种非递归生成树的算法
- 全排列算法--一种非递归算法的实现
- 生成排列的非递归实现算法
- 一种求解卡塔兰数(Catalan Number)的非递归算法
- 遍历二叉树的递归算法与非递归算法
- 递归算法的一种理解
- 图的递归非递归深度优先搜索和广度优先搜索,两种最小生成树算法
- 二叉树遍历的非递归算法
- 二叉树的非递归算法总结
- 遍历二叉树的非递归算法
- 遍历二叉树的非递归算法
- 树的深度优先非递归算法
- 二叉树的非递归算法:
- 树的非递归遍历算法
- 二叉树的遍历非递归算法
- 遍历二叉树的非递归算法
- 二叉树的遍历非递归算法
- 二叉树遍历的非递归算法
- 有效进行软件重用的小提示
- c++文件操作
- 2010 前言
- (转帖)防止应用程序被网络操作失败卡死的算法
- 设计模式学习与实践(二十一)----观察者模式(observer)
- 一种非递归生成树的算法
- Drupal十万级百万级节点网站优化
- zz学习富豪理财精粹 让有限的钱无限花!(1)
- statck 的遍历
- 微软渠道动力快车再度启动 深耕区域市场 策略落地时机成熟
- 知识小节(java)
- 学习富豪理财精粹 让有限的钱无限花!(2)
- gridview隐藏行,不删除数据
- 设计模式学习与实践(二十二)----迭代子模式(iterator)