一种树状结构节点的排序方法、装置及查询系统
技术领域
本发明属于数据结构领域,尤其涉及一种树状结构节点的排序方法、装置及查询系统。
背景技术
树状结构是指数据库中一个数据集合以及在该集合上存在的一种关系。集合中的各个元素称为树的节点,而集合上各个节点存在的关系称为父子关系,该父子关系在树的节点之间建立了一个层次结构。集合中通常包含多棵树状结构,集合中的一级节点对应树的根节点,不同一级节点之间没有直接的关系,只有一定的排列顺序。
现有的构建树状结构排序的过程中,首先从每一个一级节点开始,采用递归查询的方式遍历其下所有层次的子节点记录,再根据该子节点记录将相应的子节点排列在最终序列的正确位置上。如采用先序遍历的方式遍历一个一级节点所有层次的子节点记录,由于该先序遍历首先访问根节点然后遍历左子树,最后遍历右子树,因此第一次数据库查询操作首先获得根节点的记录数据,若该根节点的记录数据表明该根节点存在左右两个子节点,再根据该根节点的记录数据将该根节点的左节点排列在该一级节点的左边,继续执行第二次数据库查询操作,若获得的左节点记录数据表明该左节点没有子节点,则将该根节点的右节点排列在该根节点的右边。当然,若根节点存在多个子节点,则同样需要多次数据库查询操作才能构建树。由于一次数据库查询只能取得树的一个节点数据,因此,使用该方法构建一棵Q层树状结构的排序需要执行多次数据库操作,多次数据遍历才能将树的所有节点排列在最终序列的正确位置上,影响了数据库的性能,并且,随着树状结构层次Q数值的增长,多级叶子节点排序的时间开销增大,不利于后期的树层次数Q的扩展。
发明内容
本发明实施例提供了一种树状结构节点的排序方法,旨在解决现有的构建树状结构的排序存在的影响数据库性能以及难以扩展的问题。
本发明实施例是这样实现的,一种树状结构节点的排序方法,所述方法包括下述步骤:
获取组成树的所有节点的节点数据,所述节点数据包括节点所在树状结构的层数、所述节点的父节点、所述节点的子节点的个数;
对组成树的所有节点进行唯一标识,所述标识用于唯一标识所述组成树的所有节点;
根据所述节点数据以及节点的唯一标识对树的所有节点进行排序;
保存所述节点数据以及所述节点的唯一标识。
本发明实施例的另一目的在于提供一种树状结构节点的排序装置,所述装置包括:
节点数据获取单元,用于获取组成树的所有节点的节点数据,所述节点数据包括节点所在树状结构的层数、所述节点的父节点、所述节点的子节点的个数;
节点标识单元,用于对组成树的所有节点进行唯一标识,所述标识用于唯一标识所述组成树的所有节点;
节点排序单元,用于根据所述节点数据以及节点的唯一标识对树的所有节点进行排序;
节点数据保存单元,用于保存所述节点数据以及所述节点的唯一标识。
本发明实施例的另一目的在于提供一种包括上述树状结构节点的排序装置的查询系统。
本发明实施例获取树的所有节点数据,并对该树的所有节点进行唯一标识,根据该所有节点数据以及节点的唯一标识对树的所有节点进行排序,再将排序后的节点数据以及节点的唯一标识保存在包括记录节点数据的字段的列表中。遍历一次该列表,就能够获取各个节点的节点数据以及节点的唯一标识,进而根据获取的节点数据以及节点的唯一标识能够正确构建树。由于只需一次列表数据遍历操作,就能将所有节点排在正确的位置上,因此保证了数据库性能的稳定,并且,该方法在不增加开销的情况下也能够支持多级树状结构的自由扩展,增强实用性。
附图说明
图1是本发明第一实施例提供的树状结构节点的排序方法流程图;
图2是本发明第一实施例提供的树状结构图;
图3是本发明第二实施例提供的树状结构节点的排序方法流程图;
图4是本发明第三实施例提供的树状结构节点的排序装置的结构图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
本发明实施例获取树的所有节点数据,并对该树的所有节点进行唯一标识,根据该节点数据以及节点的唯一标识对树的所有节点进行排序,再保存该节点数据以及节点的唯一标识。
本发明实施例提供了一种:树状结构节点的排序方法、装置及查询系统。
所述方法包括:获取组成树的所有节点的节点数据,所述节点数据包括节点所在树状结构的层数、所述节点的父节点、所述节点的子节点的个数;
对组成树的所有节点进行唯一标识,所述标识用于唯一标识所述组成树的所有节点;
根据所述节点数据以及节点的唯一标识对树的所有节点进行排序;
保存所述节点数据以及所述节点的唯一标识。
所述装置包括:节点数据获取单元,用于获取组成树的所有节点的节点数据,所述节点数据包括节点所在树状结构的层数、所述节点的父节点、所述节点的子节点的个数;
节点标识单元,用于对组成树的所有节点进行唯一标识,所述标识用于唯一标识所述组成树的所有节点;
节点排序单元,用于根据所述节点数据以及节点的唯一标识对树的所有节点进行排序;
节点数据保存单元,用于保存所述节点数据以及所述节点的唯一标识。
所述系统包括:包括上述树状结构节点的排序装置的查询系统。
本发明实施例获取树的所有节点数据,并对该树的所有节点进行唯一标识,根据该所有节点数据以及节点的唯一标识对树的所有节点进行排序,再将排序后的节点数据以及节点的唯一标识保存在包括记录节点数据的字段的列表中。遍历一次该列表,就能够获取各个节点的节点数据以及节点的唯一标识,进而根据获取的节点数据以及节点的唯一标识能够正确构建树。由于只需一次列表数据遍历操作,就能将所有节点排在正确的位置上,因此保证了数据库性能的稳定,并且,该方法在不增加开销的情况下也能够支持多级树状结构的自由扩展,增强实用性。
为了说明本发明所述的技术方案,下面通过具体实施例来进行说明。
实施例一:
图1示出了本发明第一实施例提供的树状结构构建方法流程,详述如下:
在步骤S11中,获取组成树的所有节点的节点数据,该节点数据包括节点所在树状结构的层数、该节点的父节点、该节点的子节点的个数。
获取组成树的所有节点的节点数据,假设树状结构有3层,如图2所示。第一层的节点为一级节点,有A节点、B节点和C节点,第二层的节点为二级节点,第二层的节点为A1节点、A2节点、B1节点以及B2节点,第三层的节点为A11节点、A12节点、A21节点、A22节点,上述节点的创建时间依次靠后,A节点最早创建,而A22节点最迟创建。
查询并获取组成树中各个节点的节点数据,如获取节点所在树状结构的层数、该节点的父节点、该节点的子节点以及该节点的子节点的个数等节点数据,
在步骤S12中,对组成树的所有节点进行唯一标识,该标识用于唯一标识组成树的所有节点。
在获取了组成树的所有节点的节点数据之后,再对该树的所有节点进行唯一标识,该唯一标识用于唯一标识树的节点,一个节点的唯一标识对应于一个树的节点。比如可以用节点的创建时间作为一个节点的唯一标识。
在步骤S13中,根据该节点数据以及节点的唯一标识对树的所有节点进行排序。
其中,根据该节点数据以及节点的唯一标识对树的所有节点进行排序。的步骤具体为:
将一级节点根据该一级节点的唯一标识排列在最终位置上;如,将一个一级节点根据该节点的唯一标识排列在最终序列的第一个位置上;若还存在其他一级节点,则将该一级节点根据该一级节点的唯一标识排列在上一个一级节点所在位置后的第M+1个位置上,该M值等于上一个一级节点的子节点个数,M大于等于0;按照上述的排列方法依次将剩余的一级节点排列在最终序列的位置上。以步骤S11中的树节点为例,将该树的一级节点按该一级节点所在树的层数以及该一级节点的创建时间进行排序的结果如表1所示:
表1:
将二级节点至N-1级节点根据该二级节点的父节点以及该二级节点的唯一标识至该N-1级节点的父节点以及该N-1级节点的唯一标识排列在最终位置上,该N为树状结构的总层数;其中,该二级节点至N-1级节点的排序方法与一级节点的排序方法类似,此处不再赘述。
将N级节点根据该N级节点的父节点以及该N级节点的唯一标识排列在最终位置上。
以上述举例的树状结构节点为例,则根据上述方法,首先排序一级节点,在排序一级节点时,最早创建的一级节点在最前面,因此首先排序A节点,再排序其他一级节点;在排序二级节点时,由于二级节点A1和A2的父节点为A节点,因此首先排序二级节点A1和A2,又由于A1节点早创建于A2节点,因此先排序A1节点,根据该排序方法,得到的排序结果如表2所示:
表2:
A |
A1 |
A11 |
A12 |
A2 |
A21 |
A22 |
B |
B1 |
B2 |
B21 |
B22 |
C |
根据节点所在树的层数以及该节点的创建时间进行排序,使得用户每次查询的结果都是唯一的,当然,也可以按照其他唯一标识节点的节点标识对节点进行排序,只要保证每次查询的结果都是唯一的,不变的即可。
除了对各个节点进行升序排序,也可以根据获取的节点数据,对树中的各个节点进行降序排序,此处不再赘述。
在步骤S14中,保存节点数据以及节点的唯一标识。
在本实施例中,保存节点数据以及节点的唯一标识的列表使用单独字段记录节点的子节点个数、父节点、该节点所在树状结构的层数等节点数据以及创建时间等节点的唯一标识。
在本发明第一实施例中,首先获取组成树的所有节点的节点数据,再对该所有节点进行唯一标识,最后根据该节点数据以及节点的唯一标识进行排序。由于只需一次列表数据遍历操作,就能将所有节点排在正确的位置上,因此保证了数据库性能的稳定,并且,该方法在不增加开销的情况下也能够支持多级树状结构的自由扩展,增强实用性。
实施例二:
图3示出了本发明第二实施例提供的树状结构节点的排序方法流程,详述如下:
在实施例一的基础上,用户根据列表中已排序的节点,能够保证每次查询获取的节点是唯一的。
其中,步骤S31~步骤S34与实施例一的步骤S11~步骤S14相同。
在步骤S35中,查询节点数据以及该节点的唯一标识。
在本实施例中,查询列表存储的树的节点数据以及组成该树的节点的唯一标识。比如,查询某个节点所在的层数,该节点的创建时间等。
在步骤S36中,根据该节点数据以及节点的唯一标识构建树。
其中,构建树的过程为:首先根据一级节点的唯一标识构建树的第一层,在此基础上,再根据二级节点的唯一标识以及该二级节点的父节点构建树的第二层,根据上述构建树的方法依次构建树的第三层至第N层,该N为树状结构的总层数。
根据上述构建树的方法,则构建如图2所示的树状结构获得的结果如表3所示:
表3:
A |
B |
C |
A1 |
A2 |
B1 |
B2 |
A11 |
A12 |
A21 |
A22 |
B21 |
B22 |
在本发明第二实施例中,根据查询列表中存储的已进行排序的节点数据以及该节点的唯一标识,能够构建出唯一的树状结构。
实施例三:
图4示出了本发明第三实施例提供的树状结构节点的排序装置的结构,为了便于说明,仅示出了与本发明实施例相关的部分。
该树状结构节点的排序装置可以用于通过有线或者无线网络连接服务器的各种信息处理终端,例如移动电话、口袋计算机(Pocket Personal Computer,PPC)、掌上电脑、计算机、笔记本电脑、个人数字助理(Personal Digital Assistant,PDA)等,可以是运行于这些终端内的软件单元、硬件单元或者软硬件相结合的单元,也可以作为独立的挂件集成到这些终端中或者运行于这些终端的应用系统中,其中:
节点数据获取单元41,用于获取组成树的所有节点的节点数据,该节点数据包括节点所在树状结构的层数、该节点的父节点、该节点的子节点的个数。
节点标识单元42,用于对组成树的所有节点进行唯一标识,该标识用于唯一标识该组成树的所有节点。
在本实施例中,节点的唯一标识可以为节点的创建时间等。
节点排序单元43,用于根据该节点数据以及节点的唯一标识对树的所有节点进行排序。
作为本发明的另一个实施例,该节点排序单元43包括:一级节点排列模块431、中间节点排列模块432以及叶子节点排列模块433。
一级节点排列模块431,用于将一级节点根据该一级节点的唯一标识排列在最终位置上。
其中,该一级节点排列模块431包括:第一一级节点排列模块4311、中间一级节点排列模块4312以及剩余一级节点排列模块4313。
第一一级节点排列模块4311,用于将一个一级节点根据该节点的唯一标识排列在最终序列的第一个位置上。
中间一级节点排列模块4312,用于在存在其他一级节点时,将该一级节点根据该一级节点的唯一标识排列在上一个一级节点所在位置后的第M+1个位置上,该M值等于上一个一级节点的子节点个数,M大于等于0。
剩余一级节点排列模块4313,用于按照上述的排列方法依次将剩余的一级节点排列在最终序列的位置上。
中间节点排列模块432,用于将二级节点至N-1级节点根据该二级节点的父节点以及该二级节点的唯一标识至该N-1级节点的父节点以及该N-1级节点的唯一标识排列在最终位置上,该N为树状结构的总层数。
叶子节点排列模块433,用于将N级节点根据该N级节点的父节点以及该N级节点的唯一标识排列在最终位置上。
节点数据保存单元44,用于保存该节点数据以及该节点的唯一标识。
在本发明第三实施例中,节点标识单元42对节点数据获取单元41中获取了节点数据的节点进行唯一标识,节点排序单元43再根据节点数据和节点的唯一标识进行排序。由于只需一次列表数据操作,就能将所有节点排在正确的位置上,因此保证了数据库性能的稳定,并且,该方法在不增加开销的情况下也能够支持多级树状结构的自由扩展,增强实用性。
作为本发明的另一个实施例,该树状结构节点的排序装置还包括:节点数据查询单元45和构建树单元46。
节点数据查询单元45,获取该节点数据以及该节点的唯一标识。
构建树单元46,用于根据该节点数据以及节点的唯一标识构建树。
本发明实施例获取树的所有节点数据,并对该树的所有节点进行唯一标识,根据该所有节点数据以及节点的唯一标识对树的所有节点进行排序,再将排序后的节点数据以及节点的唯一标识保存在包括记录节点数据的字段的列表中。遍历一次该列表,就能够获取各个节点的节点数据以及节点的唯一标识,进而根据获取的节点数据以及节点的唯一标识能够正确构建树。由于只需一次列表数据遍历操作,就能将所有节点排在正确的位置上,因此保证了数据库性能的稳定,并且,该方法在不增加开销的情况下也能够支持多级树状结构的自由扩展,增强实用性。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。