现有组织结构,其特征为:1、树状;2、每个节点代表一个人;3、每个节点可有0--4个子节点;4、每个节点都可登录管理系统;5、每个节点登录系统后只能看到自己、自己的子节点、子节点的子节点等等往下类推想要的算法是如何通过登录节点,遍历其所有下属并返回下属的节点值。管理系统为数据库管理,暂定在此系统中所有人的系统编号(即节电值)均为阿拉伯数字,如组织的最高领导人编号为0,他的所有直属下属分别为1、2、3、4,2的所有直属下属为9、10、11、12举例说明一下,假设现在该组织共有4层,人员总数为33人,最大编号到41,现登录人为1号,已知其子节点有5、6、8,其子节点的子节点有21、22、23、24、31、35,要求遍历后显示的节点顺序为1、5、21、22、23、24、6、7、31、8、35不知道说清楚没有,能看明白的大侠们帮帮忙给点思路吧
解决方案 »
- Delphi将图片保存至Sql Server中的小问题?
- DELPHI idhttp (白给分了快点来啊)
- delphi 如何禁用菜单。。。急
- 谁能给我讲一下从数据库填充TreeView的(通过递归)的思路
- 怎样用Delphi的Winsock.pas中的函数获取网络游戏的封包?
- 新手,请教各位大虾有关于THTML的问题
- 急急急!随机序列生成算法,在线等待,谢谢!
- 怎样得到WINDOWS的SYSTEM路径?
- 急,求一解决方案!
- 字段的值是这样的如何用sql排序?
- delphi 报错:adoquery1:parameter '#start' not found
- 求一段能够访问局域网中计算机的文件的代码
就可以遍历得到每个节点的所有直接或间接子节点具体的差别只是在sql里实现还是程序里实现,效率的高低
2、具体代码写法要看你用什么列表控件显示,如TreeView
如果是堆的话,那一个节点N的子节点以楼主的示例来说就是N*4+1,N*4+2,N*4+3,N*4+4,判断哪些子节点在堆中,在的加入序列,深度优先遍历
编号 姓名 父节点编号
04 张三 01
begin
if ((n*4+1)>m) and ((n*4+2)>m) and ((n*4+3)>m) and ((n*4+4)>m) then
begin //判断是否最底层
temp[x]:=n;
x:=x+1;
exit;
end
else
begin
temp[x]:=n;
x:=x+1;
ergp(m,n*4+1,temp,x);
ergp(m,n*4+2,temp,x);
ergp(m,n*4+3,temp,x);
ergp(m,n*4+4,temp,x);
end;
end;我自己给搞出来了 发上来大家讨论讨论 用的深度优先遍历 构想是通过登录人的编号 把其所有下属的编号存入临时数组temp(不论该编号是否有人) 然后在另外的代码里用这个临时数组的所有元素在数据库中搜索 找到的存入正式数组 没找到就跳过 以实现最终目的