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

(首先声明:因为看到许多人对本文的热心关注,作者对本文稍作修改和补充)
本文具体介绍: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的长
度。最后,我为什么用“最优”,主要有激将之意,抛砖引玉,只是希望能引起
广大高手的注意,能提出个人独特建议,在交流上作广泛的讨论。作者本人也绝
没有夜郎自大的意思。

时间: 2024-10-29 18:41:47

无限级目录树最优算法的新研究的相关文章

无限级目录树+记忆节点状态

特点: 1.无限级节点. 2.直接产生html代码,容易修改. 3.目录清楚,类似于资源管理器,(csdn论坛的,层数多了就不容易分清楚层次了). 4.记忆节点状态,人性化. 演示: http://www.yemaweb.com/demo/tree/ 下载: http://www.yemaweb.com/demo/tree/tree.rar 核心代码如下: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"

ASP+ACCESS实现的无限级目录树

下载地址:http://www.knowsky.com/download/treemenu.rar 关键代码: <%set conn=server.createobject("ADODB.CONNECTION")connstr="DBQ="+server.mappath("db1.mdb")+";DefaultDir=;DRIVER={Microsoft Access Driver (*.mdb)};"conn.open

利用Ajax实现无限级目录树(.NET)

ajax 使用了AjaxPro框架,感觉还是比较好用.比较符合自己的习惯,整个代码不难.是利用CSS实现的.家里的电脑上不能安装MS SQL,索性就用MySQL.顺路学习了一下使用MySql的Function.希望使用的XDJM能在这里留个言.谢谢 数据库:ysql> create table category(    -> categoryid int,    -> categoryname varchar(20),    -> FatherId int);    DELIMIT

asp实现无限级目录数的关键代码部分

asp实现无限目录数的关键代码部分 <% set conn=server.createobject("ADODB.CONNECTION") connstr="DBQ="+server.mappath("db1.mdb")+";DefaultDir=;DRIVER={Microsoft Access Driver (*.mdb)};" conn.open connstr function menu(id) set rs=s

dhtmlxTree目录树增加右键菜单以及拖拽排序的实现方法_php实例

在以前的一个公司内部管理系统(InnerOA)中,对于目录树的构造我采用的是dTree,实现无限级目录显示及右键菜单功能(右键菜单中包括:新建.修改.共享.删除.刷新等功能,如下图所示) 关于公司内部管理系统(InnerOA)中目录树的一些知识以后有时间将整理并提供源码. 但是dTree唯一遗憾的是不支持拖拽排序功能,这让我在完成InnerOA之后心里一直纠结的问题.在网上查看关于目录树的一些内容,dTree是我目前认为最符合我项目的一个.在一个偶然机会,发现了另一个强大的目录树,也就是本文所说

管理Windows Server 2003活动目录树系

我们的公司有跨越了三个州的三个分离的Windows Server 2003树.我们最近使用了多协议标记交换的虚拟专用网络(MPLS VPN)隧道把两个远程站点到我们的公司站点.我最终的目的是像一个树(forest)那样管理网络,并且把两个远程站点作为公司的一个子域.我知道通过删除这两个站点上的活动目录,然后作为子域加入公司的域就很容易做到,但是这样仍然需要重新建立用户帐户,而且还要访问所有的机器把它们重新添加到新的域中.我知道会有其他的方法,请告诉我,谢谢. 我会建议你关注一下活动目录迁移工具(

Apache Geronimo上全局目录树实现以及自定义资源开发与使用

服务器端全局目录树 什么是全局目录树 JNDI(Java Naming and Directory Interface)是一组应用程序访问命名和目录服务的 API, 通过它客户程序可以以统一的方式访问多种目录服务.Java EE 应用服务器通常都会集成一个 目录树的实现 , 以维护一个服务器端全局共享目录树. 以此 , 服务器可以将一些资源绑定到目录树上 , 比如说数据库连接池,JMS 资源等 , 而客户端应用程序则可以通过标准的 JNDI 接口等方式来获取这些资源引用.所谓全局 , 是相对 j

dataset-c#中读取目录树xml文件并显示到dataGridView中

问题描述 c#中读取目录树xml文件并显示到dataGridView中 读取xml,但是出来的表格各级目录的位置不对应,差一行 是因为我每列都创建了一个新的datarow,我想问问怎么能够读出来都对应整齐? 还有就是如果我不清楚这个xml目录树文件有几个等级 ,怎么用程序自动读出来并建立列,现在都是我手动建立的? 本人菜鸟一枚,正在学习中,还望大神们帮助~ 这是xml文件的结构图 资源目录是一级目录,floderlist中是剩下的各级目录,每个都有FolderCode和FolderParentC

Linux磁盘分区,目录树,文件系统的关系(转)

研究了很久,自始至终不能够从三者的区别和联系中找到一个大脑与这些概念之间合适的相处方式.对于基本概念和理论理解不到位,在工作之中会走很多弯路和犯很多错误.今天花一天的时间,终于对三者的区别和联系有了更进一步的理解,特此记录并分享之,供大家探讨交流. (一)磁盘分区 首先要明白的是磁盘为什么要分区. 一是从数据安全方面考虑,二是从系统访问磁盘的性能考虑.一个磁盘的某个分区损坏,不在该分区的数据将不会受到影响,这样就能够有效地保护不同业务的数据.过大的磁盘分区在系统进行读写的时候,会降低系统的读写性