无限级目录树最优算法的新研究

本文介绍了用于实现无限级目录树的数据结构和数据库表设计,包括节点的父节点查询、子节点获取、所有子孙节点获取等操作的复杂度分析。在资源管理器和论坛帖子树场景中,该结构提供了优化的解决方案,并支持动态增删节点。作者期待通过分享引发更多关于最优算法的讨论。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先声明:因为看到许多人对本文的热心关注,作者对本文稍作修改和补充)
本文具体介绍:1。目录树的数据结构
              2。探讨具体应用中数据库的查询复杂度。

表结构:  id(编号)pid(父节点)nodepath(路径)nodetype(状态)
 
示例数据:1         0             0>               F
          2         0             0>               D
          3         2             0>2>             D
          4         3             0>2>3>           F
测试项目:                                                   
1。获取当前节点的父节点:复杂度:O(n)
2。获取当前节点的下级子节点: 复杂度:O(n)
3。获取当前节点的所有子孙节点: 复杂度:O(n)
4。获取当前节点的所有直系祖宗节点: 复杂度:O(n)
5。删除、新增节点时比较容易实现,主要是实现节点转移有点麻烦:设被转移

的节点为S,转移到的目的节点为T,则S.nodepath=T.nodepath+T.id+'>';同时检

查S是否有兄弟节点,无则S的父节点的nodetype改为F;检查T的nodetype,如为F

则改为D;修改表中S的子孙节点nodepath。一般这种情况出现的几率很低。
说明:本人的初衷是将该结构主要应用在类资源管理器的目录树中,根据

nodetype,画树的时候不必再搜索数据库去判断该节点是否还有子节点。至于用

在bbs帖子树,像帖子树中有一个帖子最新的,就必须将整个帖子树置顶这样的

情况,有种实用解决办法:增加一个字段rootid(帖子的根帖):select distanct

rootid from table order by postdate。
本数据结构支持无限级树,关于树的深度,可以根据实际情况而定nodepath的长

度。最后,我为什么用“最优”,主要有激将之意,抛砖引玉,只是希望能引起

广大高手的注意,能提出个人独特建议,在交流上作广泛的讨论。作者本人也绝

没有夜郎自大的意思。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值