针对树形结构的节点处理方法及装置、介质、设备与流程



1.本发明涉及空调技术领域,尤其是涉及一种针对树形结构的节点处理方法及装置、介质、设备。


背景技术:



2.数据的查询算法依赖于数据存储的方式,而通常树形结构的数据存储是在节点上存储父节点的编号来确定各节点的父子关系。例如,针对图1示出的树形数据图,各个节点形成的数据表可以参见图2,这样的存储方式可以很直观的体现各个节点之间的关系,通常可以满足大多数场景需求。
3.基于这种数据存储方式,在查询某个节点的所有节点时,一般是使用指定节点的编号,一层一层递归往下查。但是当业务需求变得多了,数据量庞大了,树的层级很多时,这样的方式就不再适合了。因为递归查询效率会随着树的层级深度提高而变差,当树的层级很多时,递归方法不断调用自身,当资源用尽时,会导致调用栈溢出,出现系统错误。


技术实现要素:



4.为了解决上述技术问题或者至少部分地解决上述技术问题,本发明提供了一种针对树形结构的节点处理方法及装置、介质、设备。
5.第一方面,本发明实施例提供一种针对树形结构的节点处理方法,包括:
6.在接收到节点查询指令时,确定待查询节点的第一值和第二值;其中,所述节点查询指令为查询所述待查询节点的所有子节点的指令;所述树形结构中的每一个节点具有第一值和第二值;其中,每一个节点的第一值小于该节点的第二值;在除了根节点之外的其它节点中,每一个节点的第一值大于该节点的父节点的第一值,每一个节点的第二值小于该节点的父节点的第二值;
7.在所述树形结构中查询第一值大于所述待查询节点的第一值且第二值小于所述待查询节点的第二值的节点作为查询到的子节点。
8.第二方面,本发明实施例提供一种针对树形结构的节点处理装置,包括:
9.第一确定模块,用于在接收到节点查询指令时,确定待查询节点的第一值和第二值;其中,所述节点查询指令为查询所述待查询节点的所有子节点的指令;所述树形结构中的每一个节点具有第一值和第二值;其中,每一个节点的第一值小于该节点的第二值;在除了根节点之外的其它节点中,每一个节点的第一值大于该节点的父节点的第一值,每一个节点的第二值小于该节点的父节点的第二值;
10.第一查模块,用于在所述树形结构中查询第一值大于所述待查询节点的第一值且第二值小于所述待查询节点的第二值的节点作为查询到的子节点。
11.第三方面,本发明实施例提供一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行第一方面提供的方法。
12.第四方面,本发明实施例提供一种计算设备,包括存储器和处理器,所述存储器中
存储有可执行代码,所述处理器执行所述可执行代码时,实现第一方面提供的方法。
13.本发明实施例提供的针对树形结构的节点处理方法及装置、介质、设备,各自组合后具有如下有益效果:
14.(1)本发明实施例中,在接收到节点查询指令时,确定待查询节点的第一值和第二值,在所述树形结构中查询第一值大于所述待查询节点的第一值且第二值小于所述待查询节点的第二值的节点作为查询到的子节点,可见本发明实施例提供的方法无需递归查询,因此可以避免递归查询所带来的各种缺点,而且本发明实施例可以提高节点查询的效率,提高查询的稳定性。
15.(2)在确定根节点的第二值时考虑了树形结构的节点数量和预设扩容倍数,可以保证在当前设置的节点的第一值和第二值在一段时间后仍满足节点查询需求等。
16.(3)通过第一计算式计算节点的取值长度,基于节点的取值长度以及父节点的第一值和第二值确定节点的第一值和第二值,这样不仅可以保证每一个节点的第一值大于父节点的第一值,节点的第二值小于父节点的第二值,而且可以保证属于同一个父节点的各个节点的第二值和第一值之间的差值大致相同,保证节点的第一值和第二值的均匀分布,从而保证整个树形结构的稳定性,便于对树形结构进行节点扩增。
附图说明
17.此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本发明的实施例,并与说明书一起用于解释本发明的原理。
18.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
19.图1为一种树形结构的示意图;
20.图2是现有技术中针对图1而设置的数据存储表的示意图;
21.图3是本发明一个实施例中针对树形结构的节点处理方法的流程示意图;
22.图4是本发明一个实施例中针对图1的树形结构中的各个节点而设置的第一值和第二值的示意图;
23.图5是本发明一个实施例中针对图4而形成的数据存储表的示意图;
24.图6是本发明一个实施例中针对树形结构的节点处理装置的结构框图。
具体实施方式
25.为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
26.第一方面,本发明实施例提供一种针对树形结构的节点处理方法,该方法可以由任一计算设备执行,参见图3,该方法包括如下步骤s110~s120:
27.s110、在接收到节点查询指令时,确定待查询节点的第一值和第二值;其中,所述节点查询指令为查询所述待查询节点的所有子节点的指令;所述树形结构中的每一个节点
具有第一值和第二值;其中,每一个节点的第一值小于该节点的第二值;在除了根节点之外的其它节点中,每一个节点的第一值大于该节点的父节点的第一值,每一个节点的第二值小于该节点的父节点的第二值;
28.s120、在所述树形结构中查询第一值大于所述待查询节点的第一值且第二值小于所述待查询节点的第二值的节点作为查询到的子节点。
29.可理解的是,在执行本发明实施例提供的方法之前,需要对树形结构的数据存储方式进行定义,即确定树形结构中每一个节点的第一值和第二值。
30.其中,在树形结构中的每一个节点可以用节点id进行标识,例如,在一个树形结构中一共有300个节点,则可以利用节点的顺序编号作为节点id对节点进行标识。但是节点id不能体现父节点和子节点之间的关系,因此本发明实施例中对每一个节点还设置了第一值和第二值,通过第一值和第二值可以体现父节点和子节点之间的关系。
31.其中,每一个节点的第一值小于这个节点的第二值,即两个值之间不能是相等的,第一值可以称为左值,第二值可以称为右值。
32.其中,为了体现父节点和子节点之间的关系,每一个节点的第一值大于该节点的父节点的第一值,每一个节点的第二值小于该节点的父节点的第二值。也就是说,一个父节点的第一值小于该父节点下各个子节点的第一值,一个父节点的第二值大于该父节点下各个子节点的第二值。
33.在实际中,可以先确定第一层中根节点的第一值和第二值,然后依据上述关系确定第二层中的各个节点的第一值和第二值。接着,根据第二层中一个节点的第一值和第二值,确定该节点在第三层中的各个子节点的第一值和第二值。以此类推,可以确定每一层中每一个节点的第一值和第二值。
34.基于以上数据存储方式的树形结构,计算设备在接收到一个节点查询指令时,可以从节点查询指令中获取待查询节点的节点id,进而根据节点id确定待查询节点的第一值和第二值。然后根据待查询节点的第一值和第二值,从树形结构中进行节点查询,得到待查询节点在各层的所有子节点。
35.具体的,可以生成一个查询语句,通过该查询语句可以查询得到第一值大于所述待查询节点的第一值且第二值小于所述待查询节点的第二值的节点,将查询得到的节点作为待查询节点的子节点。
36.例如,需要查询节点a的所有子节点,节点a的第一值和第二值分别是101和200,则查询语句为:select*from tree_node where left》101 and right《200,通过该查询语句从而可以从树形结构中查询节点a的所有子节点。可见,这种方式不需要进行递归查询,从而避免了递归查询的缺点。
37.在一个实施例中,所述树形结构中的根节点的第一值和第二值可以预先采用如下步骤确定:
38.a1、获取所述树形结构的节点数量和预设扩容倍数;
39.a2、计算所述树形结构的节点数量和所述预设扩容倍数之间的乘积,将所述乘积作为所述根节点的第二值,并将所述根节点的第一值设置为1。
40.参见图4,例如,一个树形结构的节点数量预估为500个,预设扩容倍数为10,500*10=5000,因此根节点的第二值为5000,根节点为树形结构中的第一个节点,因此可以将根
节点的第一值设置为1,至此根节点的第一值为1,第二值为5000。在该树形结构中除了根节点之外的所有节点的第一值都大于1,除了根节点之外的所有节点的第二值都小于5000。
41.其中,由于树形结构在使用过程中会进行节点增加、删除,因此树形结构的节点数量是会发生变化的,因此上述树形结构的节点数量不必过于精准,可以是一个在当前预估的大致节点数量。
42.其中,预设扩容倍数,是指由于树形结构可能会增加节点,导致在经过一段时间后树形结构的节点数量相较于当前的节点数量成倍数增长,因此设置了最大的倍数——预设扩充倍数,保证在当前设置的节点的第一值和第二值在一段时间后仍满足节点查询需求等。
43.在一个实施例中,所述树形结构中第i层中每一个节点的第一值和第二值可以预先采用如下步骤确定:
44.b1、获取在第i层节点中属于同一个父节点的各个节点的数量和预设扩展数量;其中,i为大于1的整数;
45.b2、获取在第i层节点中属于同一个父节点的各个节点的所属父节点对应的取值长度;其中,所述根节点对应的取值长度为所述根节点的第二值;
46.b3、根据在第i层节点中属于同一个父节点的各个节点的数量和预设扩展数量以及在第i层节点中属于同一个父节点的各个节点的所属父节点对应的取值长度,计算在第i层节点中属于同一个父节点的各个节点对应的取值长度;
47.在一个实施例中,步骤b3中可以具体采用第一计算式计算第i层中各个节点的取值长度,第一计算式为:
[0048][0049]
式中,ci为第i层中属于同一个父节点的各个节点对应的取值长度,c
i-1
为第i层中属于同一个父节点的各个节点的所属父节点对应的取值长度,ni为第i层中属于同一个父节点的各个节点的数量,mi为第i层中属于同一个父节点的各个节点的预设扩展数量。
[0050]
举例来说,参见图4,针对第2层中的各个节点的第一值和第二值的确定过程如下:第二层中的三个节点同属于一个父节点即根节点,在第二层中包括三个节点,即第二层中中属于同一个父节点的各个节点的数量为3,假设第二层还可以扩展2个节点,因此扩展后第二层中可以包括5个节点。第二层中的各个节点的父节点即根节点对应的取值长度为根节点的第二值5000。进而根据根节点对应的取值长度5000、第二层的节点数量2以及预设扩展数量3,计算第二层中的各个节点对应的取值长度,例如,通过上述第一计算式可以得到第二层中的各个节点对应的取值长度为5000/(3+2)=1000。进而在步骤b4中根据第二层中各个节点的取值长度1000以及根节点的第一值1和第二值5000,计算第二层中各个节点的第一值和第二值。
[0051]
举例来说,参见图4,针对第3层中的各个节点的第一值和第二值的确定过程如下:第三层中的节点“数据部”、“综合部”、
……
、“产品部”一共有6个节点,这6个节点的父节点均为“成都分公司”,即这6个节点同属一个父节点,针对“成都分公司”下还可以扩展4个节点,因此第三层中属于同一个父节点的各个节点的数量为6,预设扩展数量为4。第二层中各个节点的取值长度为1000,例如,通过上述第一计算式可以得到第三层中这6个节点的取值
长度为1000/(4+6)=100。进而在步骤b4中根据第三层中这6个节点对应的取值长度100和“成都分公司”这一节点的第一值2和第二值1000,计算第三层中这6个节点的第一值和第二值。
[0052]
针对第三层中的其它节点,例如“市场部”、
……
、“业务部”一共3个节点,这3个节点的父节点均为“绵阳分公司”,即这3个节点同属一个父节点,针对“绵阳分公司”下还可以扩展7个节点,因此第三层中属于同一个父节点的各个节点的数量为3,预设扩展数量为7。第二层中各个节点的取值长度为1000,例如,通过上述第一计算式可以得到第三层中这3个节点的取值长度为1000/(3+7)=100。进而在步骤b4中根据第三层中这3个节点对应的取值长度100和“绵阳分公司”这一节点的第一值4001和第二值4999,计算第三层中这3个节点的第一值和第二值。
[0053]
当然,不同的父节点在同一层下的预设扩展数量和节点数量之和可以不同,进而使得同一层中不同节点的取值长度不同。例如,将“绵阳分公司”下的预设扩展节点设置为2,则第三层中“市场部”、
……
、“业务部”这3个节点的取值长度为1000/(3+2)=200。此时第三层中的“数据部”、“综合部”、
……
、“产品部”这6个节点的取值长度为100,可见第三层中有的节点的取值长度为100,有的节点的取值长度为200。
[0054]
例如,第二层的每个子公司有10个集部门节点(包括原本节点和扩展节点),那么每个集部门节点的取值长度为1000/10=100,由于第二层中一共有5个子公司(包括原本节点和扩展节点),因此第三层共计5*10=50个节点。第三层的每个集部门有5个事业部门(包括原本节点和扩展节点),那么每个事业部门节点的取值长度为100/5=20,第四层共计5
×
50=250个节点,第五层为部门即叶子节点,取值长度为1。根据数值依次递增,第五层大约有1500个节点,所以该树形结构的节点数量为第一层1个+第二层5个+第三层50个+第四层250个+第五层1500个,共计1800个左右,也就是说,依据预设扩展数量可以将原本的500个节点扩展到1800个,1800远小于5000,还可以进一步扩展,因此预设扩容倍数是足够的。
[0055]
b4、根据在第i层节点中属于同一个父节点的各个节点对应的取值长度以及所述所属父节点的第一值和第二值,确定第i层中各个节点的第一值和第二值;其中,位于同一层的相邻节点中,后一个节点的第一值大于前一个节点的第二值。
[0056]
在一个实施例中,步骤b4中确定第i层中各个节点的第一值和第二值,u具体可以包括如下步骤:
[0057]
c1、将第i层中属于同一个父节点的各个节点中的第一个节点的第一值设置为所属父节点的第一值加1;
[0058]
c2、若第i层中属于同一个父节点的各个节点对应的取值长度大于第i层中的第一个节点的第一值,则在父节点为第i-1层中的第一个节点的情况下,将第i层中属于同一个父节点的各个节点中的第一个节点的第二值设置为所述第一节点对应的取值长度,将第i层中属于同一个父节点的各个节点中的第j个节点的第二值设置为第j个节点对应的取值长度与j之间的乘积,将所述第j个节点的第一值设置为第j个节点的第二值减去第j个节点的取值长度后再与1求和得到的值,将第i层中属于同一个父节点的各个节点中的最后一个节点的第一值设置为所述最后一个节点的第二值减去所述最后一个节点对应的取值长度后再与i-1求和得到的值,将所述最后一个节点的第二值设置为所属父节点的第二值减1;
其中,j为大于1且小于k的整数,k为第i层中属于同一个父节点的各个节点的数量;
[0059]
c3、若第i层中属于同一个父节点的各个节点对应的取值长度小于等于第i层中的第一个节点的第一值,则将第i层中属于同一个父节点的各个节点中的第h个节点的第二值设置为所述第h节点的第一值与所述第h节点对应的取值长度的和,将第i层中属于同一个父节点的各个节点中的第h+1个节点的第一值设置为所述第h个节点的第二值与1的和;其中,h为大于等于1且小于等于k的整数。
[0060]
可见,确定第一值和第二值的过程分为两种情况:
[0061]
(1)第i层中属于同一个父节点的各个节点对应的取值长度大于第i层中的第一个节点的第一值;即,第i层中属于同一个父节点的各个节点对应的取值长度大于i;
[0062]
(2)第i层中属于同一个父节点的各个节点对应的取值长度小于等于第i层中的第一个节点的第一值,即第i层中属于同一个父节点的各个节点对应的取值长度小于等于i。
[0063]
举例来说,经过计算得知第一层的根节点对应的取值长度为5000,根节点的第一值为1;第二层中的各个节点对应的取值长度均为1000,第二层中的第一节点的第一值为2;第三层中的各个节点的取值长度均为100,第三层中的第一个节点的第一值为3;第四层中的各个节点的取值长度均为20,第四层中的第一个节点的第一值为4;第五层中的各个节点对应的取值长度均为1,第五层中的第一个节点的第一值为5。针对第一层至第四层,由于节点的取值长度均大于所在层的第一个节点的第一值,因此针对第一层至第四层采用第(1)种情况的处理方式。针对第五层,由于节点的取值长度小于所在层的第一个节点的第一值,因此针对第五层采用第(2)种情况的处理方式。
[0064]
实际上不论哪种情况,第i层中的属于同一个父节点的各个节点中的第一个节点的第一值均设置为所属父节点的第一值加1。例如,在第四层中的节点“数据分析”,这个节点属于第三层中的节点“数据部”下的第一个节点,“数据部”这一节点的第一值为3,因此“数据分析”这一节点的第一值为3+1=4。再例如,第四层中的“产品研发”这一节点属于第三层中的节点“产品部”下的第一个节点,因此“产品研发”这一节点的第一值为“产品部”这一节点的第值901+1=902。
[0065]
针对第(1)种情况:
[0066]
在所属父节点为第i-1层中的第一个节点的情况下:
[0067]
(11)将该所属父节点在第i层中的第一个子节点的第二值设置为该第一节点对应的取值长度。例如,针对第三层的第一个节点“数据部”,该节点“数据部”的第二值为节点“数据部”对应的取值长度100。针对第四层中的第一个节点“数据分析”,该节点“数据分析”的第二值为节点“数据分析”对应的取值长度20。
[0068]
(12)第i层中属于同一个父节点的各个节点中的第j个节点的第二值为第j个节点对应的取值长度与j之间的乘积,所述第j个节点的第一值为第j个节点的第二值减去第j个节点的取值长度后再与1求和得到的值;
[0069]
例如,针对父节点“成都分公司”在第三层的6个子节点,k为6,j为大于1且小于6的整数。当j为2时,即在第三层中的第二个节点“综合部”的第二值为节点“综合部”对应的取值长度100与j=2的乘积,即200。节点“综合部”的第一值为节点“综合部”的第二值200减去节点“综合部”的取值长度100后再加1得到的101。即,节点“综合部”的第一值为101,第二值为200。
[0070]
(13)第i层中属于同一个父节点的各个节点中的最后一个节点的第一值为所述最后一个节点的第二值减去所述最后一个节点对应的取值长度后再与i-1求和得到的值,所述最后一个节点的第二值为所属父节点的第二值减1;
[0071]
例如,第三层节点中的节点“产品部”为节点“成都分公司”在第3层的最后一个子节点。节点“产品部”的父节点“成都分公司”的第二值为1000,因此节点“产品部”的第二值为节点“成都分公司”的第二值1000-1=999。节点“产品部”的第一值为节点“产品部”的第二值999减去节点“产品部”的取值长度100后得到899,i-1=3-1=2,将899与2求和,得到901,即节点“产品部”的第一值为901。
[0072]
以上(11)、(12)、(13)是针对第i层中的节点的所属父节点为第i-1层中的第一个节点的情况下的处理方式。
[0073]
在一个实施例中,在第i层中的节点的父节点不是第i-1层中的第一个节点且不是最后一个节点的情况下,该父节点在第i层中的第一个子节点的第一值可以为该父节点的所在层中的前一个节点在第i层中的最后一个子节点的第二值加1。例如,节点“合肥分公司”在第三层中的第一个子节点的第一值为前一个节点“成都分公司”在第三层中的最后一个子节点的第二值999+1=1000。节点“合肥分公司”在第三层中的第一个子节点的第二值可以为其第一值1000与该第一个子节点对应的取值长度100的和即1100。该父节点在第i层中的第二个子节点的第一值可以为该父节点在第i层中的第一个子节点的第二值与1的和,例如,节点“合肥分公司”在第三层中的第二个子节点的第一值为第一个子节点的第二值1100与1的和即1101,节点“合肥分公司”在第三层中的第二个子节点的第二值为其第一值1101与第二个子节点的取值长度100的和即1201。以此类推,可以得到该父节点在第i层中的每一个子节点的第一值和第二值,但是该父节点在第i层中的最后一个子节点的第二值要小于该父节点的第二值,例如,该父节点在第i层中的最后一个子节点的第二值为该父节点的第二值减1后得到的值。
[0074]
在一个实施例中,在第i层中的节点的父节点是第i-1层中的最后一个节点的情况下,将第i层中属于同一个父节点的各个节点中的第一个节点的第一值设置为所属父节点的第一值加1后得到的值,将该第一个节点的第二值可以设置在该第一个节点的第一值与该第一个节点的取值长度之和的附近。例如,节点“市场部”的第一值为父节点“绵阳分公司”的第一值4001加1得到的值4002,节点“市场部”的第二值为节点“市场部”的第一值4002与节点“市场部”对应的取值长度100之和的附近,即4102的附近,在图4中取4100。将第i层中属于同一个父节点的各个节点中的最后一个节点的第一值设置为该最后一个节点的第二值减去该最后一个节点对应的取值长度后加i后得到的值,将该最后一个节点的第二值设置为所属父节点的第二值减1。例如,第三层中的节点“业务部”的第二值为父节点“绵阳分公司”的第二值4999减1=4998,节点“业务部”的第一值为节点“业务部”的第二值4998减去节点“业务部”对应的取值长度100后再与i=3相加得到4901,即节点“业务部”的第一值为4901。针对第i层中属于同一个父节点的各个节点中的第二个节点至倒数第二个节点的第一值和第二值,可以根据第一个节点的第二值依次类推得到。例如,第一个节点“市场部”的第二值为4100,则第二个节点的第一值可以为第一个节点的第二值加1后得到的值,即4101,第二个节点的第二值可以为第二个节点的第一值加取值长度后得到的值,即4201。
[0075]
针对第(2)种情况:
[0076]
第i层中属于同一个父节点的各个节点中的第h个节点的第二值为所述第h节点的第一值与所述第h节点对应的取值长度的和,第i层中属于同一个父节点的各个节点中的第h+1个节点的第一值为所述第h个节点的第二值与1的和;其中,h为大于等于1且小于等于k的整数。
[0077]
例如,针对图4中的第五层中的第一个节点的第二值为其第一值4与该第一个节点的取值长度1的和,即第五层中的第一个节点的第二值为4+1=5,第二个节点的第一值为第一个节点的第二值与1的和,即5+1=6,第二个节点的第二值为第二个节点的第一值6与第二个节点的取值长度1的和,即第二个节点的第二值为7。依次类推,第五层中的最后一个节点的第一值为4982,第二值为4983。
[0078]
需要注意的是,不论一个节点的第一值和第二值如何确定,该节点的第一值一定大于该节点的父节点的第一值,该节点的第二值一定小于该节点的父节点的第二值,而且在同一层中节点的第一值和第二值形成的序列是逐渐增大的,例如,第二层对应的序列为{2,1000,1001,2000,
……
,4001,4999},这是一个总的要求,在该总要求下,各个节点的第一值和第二值可以根据需求设置。
[0079]
例如,针对图4中的第五层中的节点“调研分析”,如果按照上述依次类推的方式计算得到的第一值为4000,但是节点“调研分析”的父节点“市场调研”的第一值为4003,此时由于节点“调研分析”的第一值必须大于父节点“市场调研”的第一值,因此节点“调研分析”的第一值不能取4000,可以取4003+1=4004,接着节点“调研分析”的第二值为第一值4003与取值长度1的和,即4005。
[0080]
通过上述可选的实施方式,可以确定一个树形结构中每一个节点的第一值和第二值。
[0081]
在一个实施例中,本发明实施例提供的方法还可以包括:
[0082]
在接收到节点增加指令时,在需要增加的节点的所在层中寻相邻的两个节点,所述两个节点中的后一个节点中的第一值和前一个节点的第二值之间的差值大于所述两个节点对应的取值长度;
[0083]
在寻到的两个节点之间增加一个节点,且新增节点的第一值为所述两个节点中的前一个节点的第二值加1,所述新增节点的第二值为前一个节点的第二值加上所述前一个节点对应的取值长度后得到的值。
[0084]
也就是说,当计算设备接收到一个节点增加指令时,例如,第三层中属于同一个父节点的6个节点为“数据部”、“综合部”、
……
、“产品部”,各个节点的第一值和第二值分别为(2,100)、(101,200)、(201,300)、(301,400)、(401,500)、(901,999),由于需要在第三层中添加一个节点,通过查,到第三层中的节点“产品部”的第一值为901,节点“产品部”前面的一个节点的第二值为500,两者的差值大于取值长度100,因此可以在“产品部”以及“产品部”的前一个节点之间增加一个节点,可以设置该节点的第一值为501,第二值设置为600。
[0085]
在一个实施例中,所述树形结构中的每一个节点具有节点id;所述方法还包括:在接收到节点删除指令时,根据所述节点删除指令中的节点id进行节点删除。
[0086]
可见,通过节点id可以到树形结构中的任意一个节点,进而将该节点删除。当然,也可以在节点删除指令中添加待删除节点的第一值和第二值,通过待删除节点的第一
值和第二值在树形结构中寻到待删除节点,进而将待删除节点删除。
[0087]
从图4中可以看出,各个节点的第一值和第二值可以形成一个环形结构。图5为将图4转化后得到的数据存储表。通过本发明实施例提供的方法,无需使用递归查询,从而提升了查询效率和增加了系统的可靠性。
[0088]
第二方面,本发明实施例提供一种针对树形结构的节点处理装置,参见图6,该装置100包括:
[0089]
第一确定模块110,用于在接收到节点查询指令时,确定待查询节点的第一值和第二值;其中,所述节点查询指令为查询所述待查询节点的所有子节点的指令;所述树形结构中的每一个节点具有第一值和第二值;其中,每一个节点的第一值小于该节点的第二值;在除了根节点之外的其它节点中,每一个节点的第一值大于该节点的父节点的第一值,每一个节点的第二值小于该节点的父节点的第二值;
[0090]
第一查模块120,用于在所述树形结构中查询第一值大于所述待查询节点的第一值且第二值小于所述待查询节点的第二值的节点作为查询到的子节点。
[0091]
在一个实施例中,还包括:第二确定模块,用于预先确定所述树形结构中的根节点的第一值和第二值,所述第二确定模块包括:
[0092]
第一获取单元,用于获取所述树形结构的节点数量和预设扩容倍数;
[0093]
第一计算单元,用于计算所述树形结构的节点数量和所述预设扩容倍数之间的乘积,将所述乘积作为所述根节点的第二值,并将所述根节点的第一值设置为1。
[0094]
在一个实施例中,还包括:第三确定模块,用于预先确定所述树形结构中第i层中每一个节点的第一值和第二值,第三确定模块包括:
[0095]
第二获取单元,用于获取在第i层节点中属于同一个父节点的各个节点的数量和预设扩展数量;其中,i为大于1的整数;
[0096]
第三获取单元,用于获取在第i层节点中属于同一个父节点的各个节点的所属父节点对应的取值长度;其中,所述根节点对应的取值长度为所述根节点的第二值;
[0097]
第二计算单元,用于根据在第i层节点中属于同一个父节点的各个节点的数量和预设扩展数量以及在第i层节点中属于同一个父节点的各个节点的所属父节点对应的取值长度,计算在第i层节点中属于同一个父节点的各个节点对应的取值长度;
[0098]
第二确定单元,用于根据在第i层节点中属于同一个父节点的各个节点对应的取值长度以及所述所属父节点的第一值和第二值,确定第i层中各个节点的第一值和第二值;其中,位于同一层的相邻节点中,后一个节点的第一值大于前一个节点的第二值。
[0099]
在一个实施例中,第二计算单元具体用于:采用第一计算式计算第i层中各个节点的取值长度,第一计算式为:
[0100][0101]
式中,ci为第i层中属于同一个父节点的各个节点对应的取值长度,c
i-1
为第i层中属于同一个父节点的各个节点的所属父节点对应的取值长度,ni为第i层中属于同一个父节点的各个节点的数量,mi为第i层中属于同一个父节点的各个节点的预设扩展数量。
[0102]
在一个实施例中,第二确定单元具体包括:
[0103]
第一设置子单元,用于将第i层中属于同一个父节点的各个节点中的第一个节点
的第一值设置为所属父节点的第一值加1;
[0104]
第二设置子单元,用于若第i层中属于同一个父节点的各个节点对应的取值长度大于第i层中的第一个节点的第一值,则在父节点为第i-1层中的第一个节点的情况下,将第i层中属于同一个父节点的各个节点中的第一个节点的第二值设置为所述第一节点对应的取值长度,将第i层中属于同一个父节点的各个节点中的第j个节点的第二值设置为第j个节点对应的取值长度与j之间的乘积,将所述第j个节点的第一值设置为第j个节点的第二值减去第j个节点的取值长度后再与1求和得到的值,将第i层中属于同一个父节点的各个节点中的最后一个节点的第一值设置为所述最后一个节点的第二值减去所述最后一个节点对应的取值长度后再与i-1求和得到的值,将所述最后一个节点的第二值设置为所属父节点的第二值减1;
[0105]
第三设置子单元,用于若第i层中属于同一个父节点的各个节点对应的取值长度小于等于第i层中的第一个节点的第一值,则将第i层中属于同一个父节点的各个节点中的第h个节点的第二值设置为所述第h节点的第一值与所述第h节点对应的取值长度的和,将第i层中属于同一个父节点的各个节点中的第h+1个节点的第一值设置为所述第h个节点的第二值与1的和;其中,h为大于等于1且小于等于k的整数。
[0106]
在一个实施例中,装置还包括:
[0107]
第一新增模块,用于在接收到节点增加指令时,在需要增加的节点的所在层中寻相邻的两个节点,所述两个节点中的后一个节点中的第一值和前一个节点的第二值之间的差值大于所述两个节点对应的取值长度;在寻到的两个节点之间增加一个节点,且新增节点的第一值为所述两个节点中的前一个节点的第二值加1,所述新增节点的第二值为前一个节点的第二值加上所述前一个节点对应的取值长度后得到的值。
[0108]
在一个实施例中,所述树形结构中的每一个节点具有节点id;装置还包括:第一删除模块,用于在接收到节点删除指令时,根据所述节点删除指令中的节点id进行节点删除。
[0109]
可理解的是,本发明实施例提供的装置中有关内容的解释、具体实施方式、有益效果、举例等内容可以参见第一方面提供的方法中的相应部分,此处不再赘述。
[0110]
第三方面,本发明实施例提供一种计算机可读介质,所述计算机可读介质上存储有计算机指令,所述计算机指令在被处理器执行时,使所述处理器执行第一方面提供的方法。
[0111]
具体地,可以提供配有存储介质的系统或者装置,在该存储介质上存储着实现上述实施例中任一实施例的功能的软件程序代码,且使该系统或者装置的计算机(或cpu或mpu)读出并执行存储在存储介质中的程序代码。
[0112]
在这种情况下,从存储介质读取的程序代码本身可实现上述实施例中任何一项实施例的功能,因此程序代码和存储程序代码的存储介质构成了本发明的一部分。
[0113]
用于提供程序代码的存储介质实施例包括软盘、硬盘、磁光盘、光盘(如cd-rom、cd-r、cd-rw、dvd-rom、dvd-ram、dvd-rw、dvd+rw)、磁带、非易失性存储卡和rom。可选择地,可以由通信网络从服务器计算机上下载程序代码。
[0114]
此外,应该清楚的是,不仅可以通过执行计算机所读出的程序代码,而且可以通过基于程序代码的指令使计算机上操作的操作系统等来完成部分或者全部的实际操作,从而实现上述实施例中任意一项实施例的功能。
[0115]
此外,可以理解的是,将由存储介质读出的程序代码写到插入计算机内的扩展板中所设置的存储器中或者写到与计算机相连接的扩展模块中设置的存储器中,随后基于程序代码的指令使安装在扩展板或者扩展模块上的cpu等来执行部分和全部实际操作,从而实现上述实施例中任一实施例的功能。
[0116]
可理解的是,本发明实施例提供的计算机可读介质中有关内容的解释、具体实施方式、有益效果、举例等内容可以参见第一方面提供的方法中的相应部分,此处不再赘述。
[0117]
第四方面,本发明实施例提供一种计算设备,该设备包括:至少一个存储器和至少一个处理器;所述至少一个存储器,用于存储机器可读程序;所述至少一个处理器,用于调用所述机器可读程序,执行第一方面提供的方法。
[0118]
可理解的是,本发明实施例提供的设备中有关内容的解释、具体实施方式、有益效果、举例等内容可以参见第一方面提供的方法中的相应部分,此处不再赘述。
[0119]
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
[0120]
本领域技术人员应该可以意识到,在上述一个或多个示例中,本发明所描述的功能可以用硬件、软件、挂件或它们的任意组合来实现。当使用软件实现时,可以将这些功能存储在计算机可读介质中或者作为计算机可读介质上的一个或多个指令或代码进行传输。
[0121]
以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的技术方案的基础之上,所做的任何修改、等同替换、改进等,均应包括在本发明的保护范围之内。

技术特征:


1.一种针对树形结构的节点处理方法,其特征在于,包括:在接收到节点查询指令时,确定待查询节点的第一值和第二值;其中,所述节点查询指令为查询所述待查询节点的所有子节点的指令;所述树形结构中的每一个节点具有第一值和第二值;其中,每一个节点的第一值小于该节点的第二值;在除了根节点之外的其它节点中,每一个节点的第一值大于该节点的父节点的第一值,每一个节点的第二值小于该节点的父节点的第二值;在所述树形结构中查询第一值大于所述待查询节点的第一值且第二值小于所述待查询节点的第二值的节点作为查询到的子节点。2.根据权利要求1所述的方法,其特征在于,所述树形结构中的根节点的第一值和第二值预先采用如下步骤确定:获取所述树形结构的节点数量和预设扩容倍数;计算所述树形结构的节点数量和所述预设扩容倍数之间的乘积,将所述乘积作为所述根节点的第二值,并将所述根节点的第一值设置为1。3.根据权利要求2所述的方法,其特征在于,所述树形结构中第i层中每一个节点的第一值和第二值预先采用如下步骤确定:获取在第i层节点中属于同一个父节点的各个节点的数量和预设扩展数量;其中,i为大于1的整数;获取在第i层节点中属于同一个父节点的各个节点的所属父节点对应的取值长度;其中,所述根节点对应的取值长度为所述根节点的第二值;根据在第i层节点中属于同一个父节点的各个节点的数量和预设扩展数量以及在第i层节点中属于同一个父节点的各个节点的所属父节点对应的取值长度,计算在第i层节点中属于同一个父节点的各个节点对应的取值长度;根据在第i层节点中属于同一个父节点的各个节点对应的取值长度以及所述所属父节点的第一值和第二值,确定第i层中各个节点的第一值和第二值;其中,位于同一层的相邻节点中,后一个节点的第一值大于前一个节点的第二值。4.根据权利要求3所述的方法,其特征在于,采用第一计算式计算第i层中各个节点的取值长度,第一计算式为:式中,c
i
为第i层中属于同一个父节点的各个节点对应的取值长度,c
i-1
为第i层中属于同一个父节点的各个节点的所属父节点对应的取值长度,n
i
为第i层中属于同一个父节点的各个节点的数量,m
i
为第i层中属于同一个父节点的各个节点的预设扩展数量。5.根据权利要求3所述的方法,其特征在于,所述确定第i层中各个节点的第一值和第二值,包括:将第i层中属于同一个父节点的各个节点中的第一个节点的第一值设置为所属父节点的第一值加1;若第i层中属于同一个父节点的各个节点对应的取值长度大于第i层中的第一个节点的第一值,则在父节点为第i-1层中的第一个节点的情况下,将第i层中属于同一个父节点的各个节点中的第一个节点的第二值设置为所述第一节点对应的取值长度,将第i层中属
于同一个父节点的各个节点中的第j个节点的第二值设置为第j个节点对应的取值长度与j之间的乘积,将所述第j个节点的第一值设置为第j个节点的第二值减去第j个节点的取值长度后再与1求和得到的值,将第i层中属于同一个父节点的各个节点中的最后一个节点的第一值设置为所述最后一个节点的第二值减去所述最后一个节点对应的取值长度后再与i-1求和得到的值,将所述最后一个节点的第二值设置为所属父节点的第二值减1;若第i层中属于同一个父节点的各个节点对应的取值长度小于等于第i层中的第一个节点的第一值,则将第i层中属于同一个父节点的各个节点中的第h个节点的第二值设置为所述第h节点的第一值与所述第h节点对应的取值长度的和,将第i层中属于同一个父节点的各个节点中的第h+1个节点的第一值设置为所述第h个节点的第二值与1的和;其中,h为大于等于1且小于等于k的整数。6.根据权利要求1所述的方法,其特征在于,还包括:在接收到节点增加指令时,在需要增加的节点的所在层中寻相邻的两个节点,所述两个节点中的后一个节点中的第一值和前一个节点的第二值之间的差值大于所述两个节点对应的取值长度;在寻到的两个节点之间增加一个节点,且新增节点的第一值为所述两个节点中的前一个节点的第二值加1,所述新增节点的第二值为前一个节点的第二值加上所述前一个节点对应的取值长度后得到的值。7.根据权利要求1所述的方法,其特征在于,所述树形结构中的每一个节点具有节点id;所述方法还包括:在接收到节点删除指令时,根据所述节点删除指令中的节点id进行节点删除。8.一种针对树形结构的节点处理装置,其特征在于,包括:第一确定模块,用于在接收到节点查询指令时,确定待查询节点的第一值和第二值;其中,所述节点查询指令为查询所述待查询节点的所有子节点的指令;所述树形结构中的每一个节点具有第一值和第二值;其中,每一个节点的第一值小于该节点的第二值;在除了根节点之外的其它节点中,每一个节点的第一值大于该节点的父节点的第一值,每一个节点的第二值小于该节点的父节点的第二值;第一查模块,用于在所述树形结构中查询第一值大于所述待查询节点的第一值且第二值小于所述待查询节点的第二值的节点作为查询到的子节点。9.一种计算机可读存储介质,其特征在于,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行权利要求1~7中的任一项所述的方法。10.一种计算设备,其特征在于,包括存储器和处理器,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现权利要求1~7中的任一项所述的方法。

技术总结


本发明涉及一种针对树形结构的节点处理方法及装置、介质、设备,方法包括:在接收到节点查询指令时,确定待查询节点的第一值和第二值;其中,所述节点查询指令为查询所述待查询节点的所有子节点的指令;所述树形结构中的每一个节点具有第一值和第二值;其中,每一个节点的第一值小于该节点的第二值;在除了根节点之外的其它节点中,每一个节点的第一值大于该节点的父节点的第一值,每一个节点的第二值小于该节点的父节点的第二值;在所述树形结构中查询第一值大于所述待查询节点的第一值且第二值小于所述待查询节点的第二值的节点作为查询到的子节点。本发明实施例无需使用递归查询,从而提升了查询效率和增加了系统的可靠性。性。性。


技术研发人员:

张银波 陈良

受保护的技术使用者:

四川虹美智能科技有限公司

技术研发日:

2022.10.11

技术公布日:

2022/12/23

本文发布于:2024-09-23 01:25:56,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/1/47963.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:节点   所述   层中   长度
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议