依据数据集 进行 树 的构造(treeview & dataset) 方法一

type

PDepData=^DepData;

DepData = record

ID: Integer;

DepID: string;

DepName: string;

end;

procedure FreeTV(tv: TTreeview);

var

i: Integer;

begin

for i := 0 to tv.Items.Count - 1 do

begin

dispose(tv.Items[i].Data);

end;

tv.Items.Clear;

end;

procedure LoadTree(tv: TTreeview; dst: TDataset);

function GetNodeData: PDepData;

begin

new(result);

with result^ do begin

ID := dst.FieldByName(‘ID‘).AsInteger;

DepID := dst.FieldByName(‘DepID‘).AsString;

DepName := dst.FieldByName(‘DepName‘).AsString;

end;

end;

var

ParentNode, NewNode: TTreeNode;

p: PDepData;

found: Boolean;

i: Integer;

begin

FreeTV(tv); // 释放树视图

dst.First;

ParentNode := nil;

while not dst.Eof do begin

p := GetNodeData;

found := false;

for i := tv.Items.Count-1 downto 0 do begin // 找 双亲节点

if pos(PDepData(tv.Items[i].Data).DepID, p.DepID) = 1 then begin

ParentNode := tv.Items[i];

found := true;

break;

end;

end;

if not found then begin // 未找到双亲节点,加到树根下

ParentNode := tv.Items.Add(nil, p.DepName);

ParentNode.Data := p;

end else           // 找到双亲节点,加到双亲节点下

tv.Items.AddChild(ParentNode, p.DepName).Data := p;

dst.Next;

end;

end;

procedure TForm1.Button1Click(Sender: TObject);

var

t: Cardinal;

begin

t := gettickcount;

LoadTree(tv, MyQuery1);

t := gettickcount - t;

caption := inttostr(t);

end;

依据数据集 进行 树 的构造(treeview & dataset) 方法一

时间: 2024-12-05 15:30:07

依据数据集 进行 树 的构造(treeview & dataset) 方法一的相关文章

LeetCode总结 -- 树的构造篇

这篇总结主要介绍树中比较常见的一类题型--树的构造.其实本质还是用递归的手法来实现,但是这类题目有一个特点,就是它是构建一棵树,而不是给定一棵树,然后进行遍历,所以实现起来思路上有点逆向,还是要练习一下.LeetCode中关于树的构造的题目有以下几道:Convert Sorted Array to Binary Search TreeConvert Sorted List to Binary Search TreeConstruct Binary Tree from Preorder and I

(源码,具体的细节请查阅相关资料)哈弗曼树的构造以及非递归遍历树

写了一点haffman树的创建和二叉树的非递归遍历. 如果编写代码的时候出现了,思维断点,可以借鉴一下, 避免浪费一些不必要的时间. 我是占位符我是占位符我是占位符我是占位符我是占位符我是占位符我是占位符我是占位符我是占位符我是占位符我是占位符我是占 位符我是占位符我是占位符我是占位符我是占位符我是占位符我是占位符我是占位符我是占位符我是占位符我是占位符我是占位符我 是占位符我是占位符我是占位符我是占位符我是占位符我是 占位符我是占位符我是占位符我是占位符我是占位符我是占位符我是占位符我是占位符

简洁常用权限系统的设计与实现(三):维护和利用节点的深度level,迭代实现树的构造

如果在节点的属性中,增加一个level属性,即树的深度,构造树会非常容易.前提是,增加和修改节点的时候,要维护level. 根节点的level为1,下一级为2,以此类推. 构造树的方法,主要有2个: // 按照level排序,根节点在上,子结点在下 public static List<Map<String, Object>> buildTree(List<TreeNode> list) { List<Map<String, Object>> r

线段树的构造

题目描述:线段树是一棵二叉树,他的每个节点包含了两个额外的属性start和end用于表示该节点所代表的区间.start和end都是整数,并按照如下的方式赋值: 根节点的 start 和 end 由 build 方法所给出. 对于节点 A 的左儿子,有 start=A.left, end=(A.left + A.right) / 2. 对于节点 A 的右儿子,有 start=(A.left + A.right) / 2 + 1, end=A.right. 如果 start 等于 end, 那么该节

转载:哈夫曼树的构造和哈夫曼编码(C++代码实现)

作者:qiqifanqi 原文:http://blog.csdn.net/qiqifanqi/article/details/6038822 #include<stdio.h> #define MAX 100 #define MAXVALUE 500 typedef struct { int weight; int parent,lchild,rchild; }node; /*哈夫曼树结点类型*/ /*-----------------------------以下部分定义哈夫曼编码存储结构--

哈夫曼树的构造

#include<iostream> #include<string> using namespace std; struct ElemType { char date; int weight; }; struct HTNode { char data; int weight; int parent,lchild,rchild; string code; }; HTNode *createTree(ElemType *w,int n)//哈夫曼树构造 { HTNode *ht=ne

HDU3516 树的构造

题目大意:平面上有n个点,构成一个单调递减的序列.即对于任意的i<j,有xi<xj,yi>yj.现在要用一棵树连接这n个点.树边为有向边,只能向右或向上.求最小的权值. 分析:本题其实是式子合并的变形. f[i][j]=f[i][k]+f[k+1][j]+y[k]-y[j]+x[k+1]-x[i] 其中s[i][j-1]<=s[i][j]<=s[i+1][j] 1 #include<iostream> 2 #include<cstdio> 3 #inc

任意树的构造

主要使用交互的方式进行树的创建,因此要求输入的时候必须准确,最好是先有一个示意图来对照着输入: 下面是使用链表的方式构建的树,思路主要是进行递归进行添加. main.cpp 1 #include "iostream" 2 #include "stdlib.h" 3 /*一般树的建立和遍历*/ 4 5 typedef struct _treenode_ 6 { 7 int data; 8 struct _treenode_ *firstChild;//指向第一子节点

C#树目录(treeView)的编写

1,数据库(DAL层)编写 (1)模板的编写 public class CategoryModel{ public int _CategoryID { get; set; } public string _CategoryName { get; set; } public string _CategoryPy { get; set; } public int _ParentID { get; set; } } (2)从数据库中获取集合 //获取类别信息 public List<CategoryM