快速创建树 算法 treeCreate treeview
树的快速创建算法,只需读一次数据库.
unit U_CreateTree;
interface
uses
Classes, ComCtrls, ADODB, SysUtils;
type
PPNodedata=^TNodeData;
TNodeData = record
ID:integer;//节点编号
PID:Integer;//父节点编号
Name:string;//节点名称
child:PPNodedata;//孩子节点
brather:PPNodedata;//兄弟节点
end;
PNodeData = PPNodeData;
TTreeFill1 = class(TThread)
TV: TTreeView;
RootID:Integer;
ptr:PPNodeData;
root:PPNodeData;//根节点
PointNode:PPNodeData;
s:array[0..10000] of PPNodeData;
constructor Create(Root_Id:integer;ATreeView: TTreeView);
private
procedure AddTree(Node: TTreeNode; PN: PNodeData);
protected
procedure Execute; override;
end;
implementation
uses
U_Main, DateUtils;
var count,nodeCount:Integer;
//----------
constructor TTreeFill1.Create(Root_Id:integer;ATreeView:TTreeView);
begin
TV:= ATreeView;
TV.Items.Clear;
RootID:=Root_Id;
inherited Create(False);
end;
//----------
procedure TTreeFill1.Execute;
var Query: TADOQuery;
i,j:Integer;
Node: TTreeNode;
begin
FreeOnTerminate := True;
TV.Items.Clear;
with Query do
begin
Query := TADOQuery.Create(nil);
Connection := frm_Main.ADOC_SQL;//需要更改
Close;
SQL.Clear;
SQL.Add('Select * from 部门表 order by 部门编号 ');
Open;
first;
count:=recordcount;
if count>0 then
begin
for i:=0 to recordcount-1 do
begin
new(PointNode);
PointNode^.child:=nil;
PointNode.brather:=nil;
PointNode^.ID:=fieldbyname('部门编号').AsInteger;
PointNode^.PID:=fieldbyname('父部门编号').AsInteger;
PointNode^.Name:=fieldbyname('部门名称').AsString;
s[i]:= PointNode;
next;
end;
end;
free;
end;
//------创建树----------
for i:=0 to count-1 do
begin
for j:=0 to count-1 do
if s[i]^.PID=s[j]^.ID then
begin
if s[j]^.child=nil then
s[j]^.child:=s[i]
else
begin
ptr:= s[j]^.child;
while (ptr.brather<>nil) do
ptr:=ptr^.brather;
ptr.brather:=s[i];
end;
end;
end;
for i:=0 to count-1 do
if s[i]^.ID=RootID then
begin
root:=s[i]; //根节点
break;
end;
Node:=TV.Items.AddObject(nil,Root^.Name,Root);//创建树的根节点
nodeCount:=0;
Node.ImageIndex := 0;
Node.SelectedIndex := 2;
AddTree(Node,root);
end;
procedure TTreeFill1.AddTree(Node:TTreeNode;PN:PNodeData);
var
nNode: TTreeNode;
PNode,q: PNodeData;
begin
PNode:=PN;
if PNode.child<>nil then
begin
q:=PNode.child;
while (q<>nil) do
begin
nNode:=TV.Items.AddchildObject(Node,q^.Name,q);
nodeCount:=nodeCount+1;
AddTree(nNode,q);
q:=q^.brather;
end;
end;
end;
end.
快速创建树 算法 treeCreate treeview相关推荐
- Flex使用mx:Tree控件创建树(可添加和删除节点)
Flex使用<mx:Tree>控件创建树的在线运行效果见:http://tongqiuyan.blog.163.com/blog/static/1955453022011927102332 ...
- Intel发布神经网络压缩库Distiller:快速利用前沿算法压缩PyTorch模型
Intel发布神经网络压缩库Distiller:快速利用前沿算法压缩PyTorch模型 原文:https://blog.csdn.net/u011808673/article/details/8079 ...
- 图像和视频的快速去雾算法研究
王昕, 孙莹莹, 李影昉. 图像和视频的快速去雾算法研究[J]. 影像科学与光化学, 2016, 34(1): 82-87. WANG Xin, SUN Yingying, LI Yingfang ...
- 一种改进的快速人脸检测算法
人脸检测是计算机视觉及相关领域的关键技术,在智能人机交互.视频会议.安全监控等方面都有着广阔的应用前景.目前人脸检测方法主要有基于知识的方法和基于统计学习的方法[1].其中,基于知识的检测算法首先抽取 ...
- MATLAB可视化实战系列(二十八)-贪心算法求快速平方根倒数算法中的“魔术数字”【含matlab源代码】
前言 快速平方根倒数算法(Fast InvSqrt)是一种快速计算平方根的倒数的算法,常用于向量标准化运算,在光照渲染中有重要应用.此算法最早可能是于90年代前期由SGI所发明,后来于1999年在&l ...
- 快速了解Bagging算法
快速了解Bagging算法 Boostrap sampling 自助采样 Bagging算法 Bagging性能 Boostrap sampling 自助采样 之前已经讲过模型的评估方法中有留一法( ...
- 编写一个字节数的rtu C语言校验程序,Modbus通信协议中CRC校验的快速C语言算法
Modbus通信协议中CRC校验的快速C语言算法 2004年第11期 福 建 电 脑 63 Modbus通信协议中CRC校验的快速C语言算法 孟开元 (西安石油大学计算机学院陕西西安710065) [ ...
- es 怎么嵌入 算法模型_快速ES-RNN: ES-RNN算法的GPU实现
快速ES-RNN: ES-RNN算法的GPU实现 题目: Fast ES-RNN: A GPU Implementation of the ES-RNN Algorithm 作者: Andrew Re ...
- 均方根误差不超过_快速平方根倒数算法
论文地址戳这里www.lomont.org 一. 介绍 快速平方根倒数算法也称为平方根倒数速算法(Fast Inverse Square Root)是用于快速计算 的一种算法.此算法由于出现在< ...
最新文章
- javascript 队列
- redhat 配置yum代理源
- js返回顶部和始终保持底部
- java 清空jframe_java – 在新游戏中清除我的JFrame和JPanel
- MySQL_常见函数
- linux安装 icc编译器,安装 Intel Compiler (ifort icc icpc)
- mac 下更新python
- Vue-Socket.io
- android中的oom,Android OOM Adjustments
- 形式语言与自动机之一 语言与文法
- 国自然的技术路线图?用PPT试试
- 使用openwrt-SDK 生成IPK
- Linux设置每分钟、每小时、每天、每周、每月、每年定时执行
- 【面经】京东搜索广告算法一面
- Cadence PSpice 补充1:脉冲信号源的详细介绍与使用方法图文演示
- 全国省市县sql(完整版)
- Codeforces Round #599 (Div. 2) B2. Character Swap (Hard Version)
- 固态硬盘坏了怎么恢复数据恢复
- python中模拟浏览器抓取网页(-)
- 激活函数(sigmoid、tanh、ReLU、leaky ReLU)
热门文章
- centos 7 显示远程窗口到本地
- 日期选择器:jquery datepicker的使用
- 解决佳能MG3080、MG2980打印机报错5B00无法打印的问题
- geotools 的书籍
- 【笔记】WGAN GP :WGAN自己的李普西斯条件是gradient clipping(大部分weight是正负0.01),在此基础上增加新的motivation让WGAN GP实现李普西斯条件
- POI导出Excel遇到数据量大该如何解决
- StarlingX分布式云部署(抢鲜)
- 百度/Google 高级搜索语法大全
- 玩转STM32F0 Value Line Discovery 之 GPIO配置工具
- php输出圆周率100位,圆周率1500多位