读书人

求生成树节点的算法解决思路

发布时间: 2012-03-24 14:00:46 作者: rapoo

求生成树节点的算法
现有这么一堆数据:
01000000,哲学专业;01010000,哲学类;01010100,哲学;01010200,逻辑学;01010300,伦理学;01010400,宗教学;01015100,应用美学;01015200,宗教事务管理;01019900,哲学类其他专业;01020000,马克思主义理论类;01020100,马克思主义基础;01020200,国际共户主义运动;01020300,中国共产党党史;01020400,中国革命史;01020500,中国社会主义建设;01020600,科学社会主义;01029900,马克思主义理论类其他专业; ...

怎么在树上标示出来?谢谢

[解决办法]
一般结构设计为
id,名称(如哲学专业),编号(如0100000),pID(上一级ID)
如果数据量不是特别多的话,可以用递归的方式读取
[解决办法]
这些数据可以这样归类,12位-->前两位表示大类(哲学专业),也就是一级菜单,也是初始父级节点;34位--〉属于二级(哲学类/马克思主义理论类);5678位--〉三级菜单
[解决办法]
01029900
前两位01是大类
2、3位是中类
后四位是小类

应该是3级划分,可以用笨方法,一级一级的生成,递归也可以
[解决办法]
01000000-哲学专业
01010000-哲学类
01010100-哲学
01010200-逻辑学
01010300-伦理学
01010400-宗教学
01015100-应用美学
01015200-宗教事务管理
01019900-哲学类其他专业
01020000-马克思主义理论类
01020100-马克思主义基础
01020200-国际共户主义运动
01020300-中国共产党党史
01020400-中国革命史
...

算法是可以用递归,但实际应用效率太低,又耗资源,
数据多的情况下可采用:
一次生成一层,展开某节点时再次生成其下级节点
取第一层:
select 编号,类别 from table where 编号 like '__000000'
第二层
select 编号,类别 from table where 编号 like '____0000'
...
数据不多,就按照以上编号排序,然后两位两位编码规则,算出其父子关系。

[解决办法]
先生成父节点,但是不要生成子节点,只需要知道父节点下是否有子节点,用 [select 'x' from table where ...],如果有值就在父节点前有个‘+’。等到实际按下‘+’的时候再生成子节点,依此类推。
可以通过对字符串的解析来进行节点的分类。

读书人网 >.NET

热点推荐