现有组织结构,其特征为: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不知道说清楚没有,能看明白的大侠们帮帮忙给点思路吧
解决方案 »
- 库字段类型有变化,用SQL改类型的时候报错,说有依赖
- 赚分帖~~~
- WebBrowser滚动条同时滚动遇难题
- 在线80分求助!回答满意再加40分!报表分组打印问题!
- 怎样给用Rave设计好的RvProject1\report1\page1\中的Text Component的text属性赋值?在线等待...立即结贴!
- 强烈建议CSDN能够贴图!!!!支持有分,UP有分
- 向各位请教一个关于软件打包的问题!
- 打印问题,大家请进
- ClientDataSet 和 DBGrid 配合做双表头
- XE8下的FastReport 二维码问题
- 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(不论该编号是否有人) 然后在另外的代码里用这个临时数组的所有元素在数据库中搜索 找到的存入正式数组 没找到就跳过 以实现最终目的