树形结构数据的构建方法、装置和计算机设备与流程

文档序号:29252499发布日期:2022-03-16 10:10阅读:184来源:国知局
树形结构数据的构建方法、装置和计算机设备与流程

1.本技术涉及数据构建技术领域,特别涉及一种树形结构数据的构建方法、装置和计算机设备。


背景技术:

2.现有技术中,树形结构数据的构建通常使用递归方式构建,但由于递归方式需要系统堆栈,所以空间消耗比较大。如果树的层级太大,则在数据结构构建的过程中容易发生栈内存溢出。


技术实现要素:

3.本技术的主要目的为提供一种树形结构数据的构建方法、装置和计算机设备,旨在解决现有树形结构数据的层级过大时容易发生栈内存溢出的弊端。
4.为实现上述目的,本技术提供了一种树形结构数据的构建方法,包括:
5.获取若干个节点数据,各所述节点数据均标注有节点id和节点父id,所述节点id为所述节点数据的id,所述节点父id为所述节点数据对应的父节点数据的id;
6.遍历所有节点数据,将具有相同节点父id的各所述节点数据归类为同一集合,得到若干个子节点数据集合;
7.再次遍历所有节点数据,以各所述节点数据为根节点,根据各所述节点数据的节点id筛选各所述节点数据分别对应的所述子节点数据集合的元素作为子节点,构建得到树形结构数据。
8.本技术还提供了一种树形结构数据的构建装置,包括:
9.第一获取模块,用于获取若干个节点数据,各所述节点数据均标注有节点id和节点父id,所述节点id为所述节点数据的id,所述节点父id为所述节点数据对应的父节点数据的id;
10.归类模块,用于遍历所有节点数据,将具有相同节点父id的各所述节点数据归类为同一集合,得到若干个子节点数据集合;
11.构建模块,用于再次遍历所有节点数据,以各所述节点数据为根节点,根据各所述节点数据的节点id筛选各所述节点数据分别对应的所述子节点数据集合的元素作为子节点,构建得到树形结构数据。
12.本技术还提供一种计算机设备,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器执行所述计算机程序时实现上述任一项所述方法的步骤。
13.本技术还提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述任一项所述的方法的步骤。
14.本技术中提供的一种树形结构数据的构建方法、装置和计算机设备,构建系统首先获取若干个节点数据,各节点数据均标注有节点id和节点父id,其中,节点id为节点数据的id,节点父id为节点数据对应的父节点数据的id。然后遍历所有节点数据,将具有相同节
点父id的各节点数据归类为同一集合,得到若干个子节点数据集合。最后,构建系统再次遍历所有节点数据,以各节点数据为根节点,根据各节点数据的节点id筛选各个节点数据分别对应的子节点数据集合的元素作为子节点,构建得到树形结构数据。与现有技术相比,本技术避免使用递归方式构建树形结构数据所需要的系统堆栈,规避树形结构数据的层级过大时容易发生栈内存溢出的弊端,实现方式简单,可快速构建无限层级树结构。
附图说明
15.图1是本技术一实施例中树形结构数据的构建方法的步骤示意图;
16.图2是本技术一实施例中树形结构数据的构建方法装置的整体结构框图;
17.图3是本技术一实施例的计算机设备的结构示意框图。
18.本技术目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
19.为了使本技术的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本技术进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本技术,并不用于限定本技术。
20.参照图1,本技术一实施例中提供了一种树形结构数据的构建方法,包括:
21.s1:获取若干个节点数据,各所述节点数据均标注有节点id和节点父id,所述节点id为所述节点数据的id,所述节点父id为所述节点数据对应的父节点数据的id;
22.s2:遍历所有节点数据,将具有相同节点父id的各所述节点数据归类为同一集合,得到若干个子节点数据集合;
23.s3:再次遍历所有节点数据,以各所述节点数据为根节点,根据各所述节点数据的节点id筛选各所述节点数据分别对应的所述子节点数据集合的元素作为子节点,构建得到树形结构数据。
24.本实施例中,构建系统获取预先录入或即时录入的若干个节点数据,其中,各个节点数据均标注有节点id和节点父id,节点id表征节点数据的id,节点父id表征节点数据对应的父节点数据的id。构建系统遍历所有节点数据,将具有相同节点父id各个节点数据归类为同一集合,从而得到若干个子节点数据集合,单个子节点数据集合内所包含的元素(集合内的元素即为节点数据)均属于同一父节点数据的子节点数据。构建系统再次遍历所有节点数据,以各个节点数据的节点id为根节点,筛选各个节点数据分别对应的子节点数据集合(即子节点数据集合所包含的元素的节点父id与作为根节点的节点数据的节点id相同),并将对应的子节点数据集合内的所有元素作为该节点数据的子节点。同时,构建系统在遍历过程中根据各个节点数据之间的根节点与子节点的对应关系进行数据合并、构建,从而得到完整的树形结构数据,该树形结构数据包含了所有的节点数据,并且树形结构数据中的各个节点数据分别以根节点或子节点的形式存在。
25.优选的,不同树形结构数据的根父节点(即树形结构数据的最初根节点)具有不同形式的节点父id,以便在构建系统录入多个不同类型的数据表、需要根据各个数据表形成各自对应的树形结构数据时,能够将各个数据表所包含的节点数据相互区分开,不会产生混淆。实际上,若有几个数量的根父节点,则这里会存在几棵不同的树。
26.本实施例在进行树形结构数据的构建时,避免使用递归方式构建树形结构数据所需要的系统堆栈,从而有效规避树形结构数据的层级过大时容易发生栈内存溢出的弊端,实现方式简单,可快速构建无限层级树结构。
27.进一步的,所述再次遍历所有节点数据,以各所述节点数据为根节点,根据各所述节点数据的节点id筛选各所述节点数据分别对应的所述子节点数据集合的元素作为子节点,构建得到树形结构数据的步骤,包括:
28.s301:以排序第一的节点数据为根节点,根据所述排序第一的节点数据的节点id筛选对应的第一子节点数据集合的元素作为子节点,构建得到第一分支数据;
29.s302:依次以排序第二的节点数据为根节点,根据所述排序第二的节点数据的节点id筛选对应的第二节点数据集合的元素作为子节点,并判断所述第一分支数据的根节点数据是否为所述第二节点数据集合的元素,或者判断所述排序第二的节点数据是否为所述第一分支数据的子节点数据;
30.s303:若所述排序第一的节点数据为所述第二节点数据集合的元素,则根据所述排序第二的节点数据和所述第二节点数据集合的元素形成第二分支数据,并以所述第一分支数据的根节点数据作为所述第二分支数据的子节点数据,将所述第一分支数据合并到所述第二分支数据上,形成第三分支数据;
31.s304:若所述排序第二的节点数据为所述第一分支数据的子节点数据,则根据所述排序第二的节点数据和所述第二节点数据集合的元素形成第二分支数据,并以所述第二分支数据的根节点数据作为所述第一分支数据的子节点数据,将所述第二分支数据合并到所述第一分支数据上,形成第四分支数据;
32.s305:若所述第一分支数据的根节点数据不是所述第二节点数据集合的元素,且排序第二的节点数据不是所述第一分支数据的子节点数据,则根据所述排序第二的节点数据和所述第二节点数据集合的元素形成第二分支数据,保持所述第一分支数据和所述第二分支数据相互独立;
33.s306:按照上述规则遍历所有节点数据,逐次形成新的分支数据,并在现有的分支数据基础上合并新的分支数据,得到所述树形结构数据。
34.本实施例中,构建系统在遍历所有节点数据的过程中,首先以排序第一的节点数据为根节点,并根据排序第一的节点数据的节点id筛选对应的第一节点数据集合,将第一节点数据集合所包含的元素作为排序第一的节点数据逇子节点,形成第一分支数据。然后,构建系统以排序第二的节点数据为根节点,根据排序第二的节点数据的节点id筛选对应的第二节点数据集合,将第二节点数据集合的元素作为排序第二的节点数据的子节点,并判断第一分支数据的根节点数据是否为第二节点数据集合的元素,或者判断排序第二的节点数据是否为第一分支数据的子节点数据。如果排序第一的节点数据属于第二节点数据集合中的元素,则以排序第二的节点数据为根节点、第二节点数据集合包含的元素作为子节点构建第二分支数据。同时将第一分支数据的根节点数据作为第二分支数据的子节点数据,以将第一分支数据合并到第二分支数据上,两者形成一个新的第三分支数据。
35.如果排序第二的节点数据为第一分支数据的子节点数据,则构建系统以排序第二的节点数据为根节点、第二节点数据集合的元素为子节点构建得到第二分支数据。并且,以第二分支数据的根节点数据作为第一分支数据的子节点数据,从而将第二分支数据合并到
第一分支数据上,两者形成一个新的第四分支数据。
36.如果第一分支数据的根节点不是第二节点数据集合的元素,并且排序第二节点数据不是第一分支数据的子节点数据,跟构建系统以排序第二的节点数据为根节点、第二节点数据集合的元素为子节点构建得到第二分支数据。而由于第一分支数据和第二分支数据之前目前暂不存在根节点与子节点的对应关系,因此保持第一分支数据和第二分支数据相互独立,等待后续遍历过程中出现新的、具有根节点与子节点的对应关系的分支数据时,再对它们进行合并。构建系统按照上述规则遍历所有节点数据,逐次形成新的分支数据、并根据根节点与子节点的对应关系在现有的分支数据基础上合并新的分支数据,最终得到完整的、包含所有节点数据的树形结构数据。
37.本方案中,每一分支数据的构建,都会在当前节点数据(即当前根节点)的基础上,用它的节点id,遍历子节点数据集合的父节点id,寻找目标数据,形成连接的数据树枝,此外,还会将当前节点数据,与已经形成的其他分支数据的根节点数据进行比较(此时若无已经形成的其他分支数据,则不需与分支数据的根节点数据比较,比较的内容,包含节点id,以及父节点id,以将当前的节点数据与已经形成的分支数据进行连接),寻找到目标数据后,形成连接的数据树枝。即本方案中,每一分支数据的构建都会自一个节点数据尽可能完整的连接多个与之相关的数枝(包括基础的子节点数据集合、以及已经形成的其他分支数据)。当最后一个节点数据作为当前的根节点数据,对基础的字节点数据集合的父节点id和已经形成的其他分支数据的根节点数据进行遍历、连接,形成最后节点数据的分支数据后,其实也同时形成最后的树形结构数据。
38.进一步的,所述再次遍历所有节点数据,以各所述节点数据为根节点,根据各所述节点数据的节点id筛选各所述节点数据分别对应的所述子节点数据集合的元素作为子节点,构建得到树形结构数据的步骤,包括:
39.s307:以各所述节点数据为根节点,根据各所述节点数据的节点id筛选各所述节点数据分别对应的所述子节点数据集合的元素作为子节点,分别构建各节点数据各自对应的分支数据;
40.s308:遍历所有分支数据,以各所述分支数据的根节点数据的节点父id为合并基准,将各所述分支数据的根节点数据作为子节点合并到对应的分支数据上,形成完整的树形结构数据。
41.本方案中,主要分为2个步骤,第一步骤,是在当前节点数据(即当前根节点)的基础上,用它的节点id,遍历子节点数据集合的父节点id,形成对应的分支数据,当对所有节点数据进行遍历后,会形成多个分支数据;然后再进入第二步,将所有的分支数据,进行数据整理和树枝连接,形成最后的树形结构数据。
42.优选的的,所述以各所述节点数据为根节点,根据各所述节点数据的节点id筛选各所述节点数据分别对应的所述子节点数据集合的元素作为子节点,分别构建各节点数据各自对应的分支数据的步骤中,单个所述分支数据的合并步骤为:
43.s3081:获取第一分支数据的根节点数据的第一节点父id;
44.s3082:根据所述第一节点父id匹配得到所述根节点数据所在的第二分支数据;
45.s3083:将所述第一分支数据合并到所述第二分支数据上,合并时所述第一分支数据的根节点数据作为所述第二分支数据的子节点。
46.另一实施例中,构建系统首先以各个节点数据为根节点,并根据各个节点数据的节点id筛选各自对应的子节点数据集合,然后以节点数据为根节点、节点数据集合的元素为子节点,分别构建各个节点数据各自对应的分支数据。在形成各个节点数据各自对应的分支数据后,构建系统遍历所有的分支数据,以各个分支数据的根节点数据的节点父id为合并基准,将各个分支数据的根节点数据作为子节点合并到对应的分支数据上,从而形成完整的、包含所有分支数据(即包含所有的节点数据)的树形结构数据。
47.具体地,构建系统遍历所有分支数据过程中,单个分支数据的合并逻辑为:构建系统获取第一分支数据的根节点数据的第一节点父id(第一分支数据为任意一个分支数据,根节点数据即为分支数据中作为根节点的节点数据,第一节点父id为该节点数据的节点父id),然后根据第一节点父id匹配该根节点数据所在的第二分支数据(即在当前步骤中,将根节点数据看做子节点,从而根据根节点数据的第一节点父id可以找到对应的父节点数据(即相对当前节点数据的上一层节点数据),父节点数据的节点id与第一节点父id相同)。构建系统将第一分支数据合并到第二分支数据上,合并是第一分支数据的根节点数据作为第二分支数据的子节点(即在原本的第二分支数据中,第一分支数据的根节点数据就是作为一个子节点存在,该步骤通过溯源将第一分支数据合并到对应的第二分数中);按照上述合并逻辑,依次对各个分支数据进行合并,所有分支数据合并后即形成完整的树形结构数据。
48.举例如下:各节点数据分别为:id:100000,name:大中华,pid:0;id:102000,name:广东省,pid:100000;id:101000,name:江苏省,pid:100000;id:102010,name:深圳市,pid:102000;id:102020,name:广州市,pid:102000;id:101010,name:南京市,pid:102000;id:102021,name:宝安区,pid:102010;id:102022,name:南山区,pid:102010(id为节点id,pid为节点父id)。在第一遍历过程中,具有相同节点父id的各所述节点数据归类为同一集合,即形成有子节点数据集合:{大中华},{广东省,江苏省},{深圳市,广州市},{南京市},{宝安区,南山区}。第二次遍历时,以各节点数据为根节点,根据各节点数据的节点id筛选对应的子节点数据集合作为子节点,构建的分支数据有:分支数据a:根节点为:大中华,子节点为:广东省,江苏省;分支数据b:根节点为:广东省,子节点为:深圳市,广州市;分支数据c:根节点为:江苏省,子节点为:南京市;分支数据d:根节点为:深圳市,子节点为:宝安区,南山区;分支数据e:根节点为:广州市,子节点为:空;分支数据f:根节点为:南京市,子节点为:空;分支数据g:根节点为:宝安区,子节点为:空;分支数据h:根节点为:南山区,子节点为:空。第三次遍历所有分支时,则以各分支数据的根节点数据的节点父id为合并基准,将各分支数据的根节点数据作为子节点合并到对应的分支数据上,即:分支数据a的根节点的节点父id无对应的节点数据,分支数据a保持不变;分支数据b的根节点数据广东省为分支数据a的子节点(打一个比方,分支数据b的根节点为广东省,广东省的节点父id为100000,而分支数据a中大中华的节点id为100000,即前者的节点父id与后者的节点id形成此处的匹配),因此将分支数据b的根节点数据作为分支数据a的子节点进行合并,后续其他的分支数据按照上述规则进行合并,在所有分支数据完成合并后,即得到完整的树形结构数据。
49.进一步的,所述遍历所有节点数据,将具有相同节点父id的各所述节点数据归类为同一集合,得到若干个子节点数据集合的步骤之后,包括:
50.s4将各所述子节点数据集合对应的节点父id作为标记信息,并分别将各所述标记信息与各所述子节点数据集合进行对应关联。
51.本实施例中,构建系统得到若干个子节点数据集合后,在同一个子节点数据集合内的所有元素(元素即节点数据)均具有相同的节点父id;因此,构建系统将各个子节点数据集合分别对应的节点父id作为标记信息,并将该标记信息与各个子节点数据集合进行对应关联,比如:pid:100000{广东省,江苏省},以便后续在构建分支数据时,可以直接匹配得到对应的节点父id,快速筛选到节点数据对应的子节点数据集合。
52.进一步的,所述再次遍历所有节点数据,以各所述节点数据的节点id为根节点,筛选各所述节点数据分别对应的所述子节点数据集合的元素作为子节点,构建得到若干个分支数据的步骤中,单个分支数据的构建步骤为:
53.s3071:获取第一节点数据的第一节点id;
54.s3072:从各所述子节点数据集合中,筛选与所述第一节点id相同的所述第二节点父id对应的第一子节点数据集合;
55.s3073:将所述第一子节点数据集合中的所有第二节点数据作为所述第一节点数据的子节点,构建得到所述分支数据。
56.本实施例中,构建系统依次根据各个节点数据、构建多个分支数据的过程中,单个分支数据的构建逻辑是相同的,下面对单个分支数据的构建步骤进行说明:构建系统获取第一节点数据的第一节点id,然后从各个子节点数据集合中,筛选与第一节点id相同的第二父节点id对应的第一子节点数据集合。第一子节点数据集合内的所有元素均对应第二父节点id,第二父节点id与第一节点id相同,即说明第一节点数据集合内的所有元素均属于第一节点数据的子节点。因此,构建系统将第一节点数据作为根节点,第一节点数据集合中的所有第二节点数据作为第一节点数据的子节点,从而构建得到一个分支数据。
57.进一步的,所述获取若干个节点数据的步骤之前,包括:
58.s5:获取原始数据,并获取所述原始数据的节点id和节点父id;
59.s6:将所述节点id标注在所述原始数据前端,并将所述节点父id标注在所述原始数据后端,形成所述节点数据。
60.本实施例中,构建系统获取用户输入的原始数据(比如大中华,广东省等数据),并获取用户对原始数据进行标注的节点id和节点父id。然后,构建系统将节点id标注在原始数据前端,并将节点父id标注在原始数据后端,从而形成节点数据(比如id:102000,name:广东省,pid:100000),方便后续树形结构数据的构建。
61.进一步的,所述再次遍历所有节点数据,以各所述节点数据为根节点,根据各所述节点数据的节点id筛选各所述节点数据分别对应的所述子节点数据集合的元素作为子节点,构建得到树形结构数据的步骤之后,包括:
62.s7:监测是否录入第三节点数据,所述第三节点数据为新的节点数据;
63.s8:若监测到录入第三节点数据,则调取所述第三节点数据的第三节点父id,并根据所述第三节点父id匹配得到所述树形结构数据上对应的第一根节点;
64.s9:将所述第三节点数据作为所述第一根节点的子节点,更新所述树形结构数据。
65.本实施例中,在构建得到树形结构数据后,构建系统实时监测用户是否录入新的节点数据,即第三节点数据(第三节点数据可以为一个,也可以为多个,在此对数量不做具体限制)。如果监测到录入了第三节点数据,构建系统则调取第三节点数据的第三节点父id,并根据该第三节点父id匹配得到树形结构数据上对应的第一根节点。然后,将第三节点
数据作为第一根节点的子节点,合并到第一根节点上,合并后更新得到新的树形结构数据,新的数据结构数据即包含了第三节点数据。
66.参照图2,本技术一实施例中还提供了一种树形结构数据的构建装置,包括:
67.第一获取模块1,用于获取若干个节点数据,各所述节点数据均标注有节点id和节点父id,所述节点id为所述节点数据的id,所述节点父id为所述节点数据对应的父节点数据的id;
68.归类模块2,用于遍历所有节点数据,将具有相同节点父id的各所述节点数据归类为同一集合,得到若干个子节点数据集合;
69.构建模块3,用于再次遍历所有节点数据,以各所述节点数据为根节点,根据各所述节点数据的节点id筛选各所述节点数据分别对应的所述子节点数据集合的元素作为子节点,构建得到树形结构数据。
70.进一步的,所述构建模块3,包括:
71.第一构建单元,用于以排序第一的节点数据为根节点,根据所述排序第一的节点数据的节点id筛选对应的第一子节点数据集合的元素作为子节点,构建得到第一分支数据;
72.判断单元,用于依次以排序第二的节点数据为根节点,根据所述排序第二的节点数据的节点id筛选对应的第二节点数据集合的元素作为子节点,并判断所述第一分支数据的根节点数据是否为所述第二节点数据集合的元素,或者判断所述排序第二的节点数据是否为所述第一分支数据的子节点数据;
73.第一合并单元,用于若所述排序第一的节点数据为所述第二节点数据集合的元素,则根据所述排序第二的节点数据和所述第二节点数据集合的元素形成第二分支数据,并以所述第一分支数据的根节点数据作为所述第二分支数据的子节点数据,将所述第一分支数据合并到所述第二分支数据上,形成第三分支数据;
74.第二合并单元,用于若所述排序第二的节点数据为所述第一分支数据的子节点数据,则根据所述排序第二的节点数据和所述第二节点数据集合的元素形成第二分支数据,并以所述第二分支数据的根节点数据作为所述第一分支数据的子节点数据,将所述第二分支数据合并到所述第一分支数据上,形成第四分支数据;
75.第二构建单元,用于若所述第一分支数据的根节点数据不是所述第二节点数据集合的元素,且排序第二的节点数据不是所述第一分支数据的子节点数据,则根据所述排序第二的节点数据和所述第二节点数据集合的元素形成第二分支数据,保持所述第一分支数据和所述第二分支数据相互独立;
76.遍历单元,用于按照上述规则遍历所有节点数据,逐次形成新的分支数据,并在现有的分支数据基础上合并新的分支数据,得到所述树形结构数据。
77.进一步的,所述构建模块3,还包括:
78.第三构建单元,用于以各所述节点数据为根节点,根据各所述节点数据的节点id筛选各所述节点数据分别对应的所述子节点数据集合的元素作为子节点,分别构建各节点数据各自对应的分支数据;
79.第三合并单元,用于遍历所有分支数据,以各所述分支数据的根节点数据的节点父id为合并基准,将各所述分支数据的根节点数据作为子节点合并到对应的分支数据上,
形成完整的树形结构数据。
80.进一步的,所述第三合并单元,包括:
81.第一获取子单元,用于获取第一分支数据的根节点数据的第一节点父id;
82.匹配子单元,用于根据所述第一节点父id匹配得到所述根节点数据所在的第二分支数据;
83.合并子单元,用于将所述第一分支数据合并到所述第二分支数据上,合并时所述第一分支数据的根节点数据作为所述第二分支数据的子节点。
84.进一步的,所述构建装置,还包括:
85.关联模块4,用于将各所述子节点数据集合对应的节点父id作为标记信息,并分别将各所述标记信息与各所述子节点数据集合进行对应关联。
86.进一步的,所述第三构建单元,包括:
87.第二获取子单元,用于获取第一节点数据的第一节点id;
88.筛选子单元,用于从各所述子节点数据集合中,筛选与所述第一节点id相同的所述第二节点父id对应的第一子节点数据集合;
89.构建子单元,用于将所述第一子节点数据集合中的所有第二节点数据作为所述第一节点数据的子节点,构建得到所述分支数据。
90.进一步的,所述构建装置,还包括:
91.第二获取模块5,用于获取原始数据,并获取所述原始数据的节点id和节点父id;
92.标注模块6,用于将所述节点id标注在所述原始数据前端,并将所述节点父id标注在所述原始数据后端,形成所述节点数据。
93.进一步的,所述构建装置,还包括:
94.监测模块7,用于监测是否录入第三节点数据,所述第三节点数据为新的节点数据;
95.调取模块8,用于若监测到录入第三节点数据,则调取所述第三节点数据的第三节点父id,并根据所述第三节点父id匹配得到所述树形结构数据上对应的第一根节点;
96.更新模块9,用于将所述第三节点数据作为所述第一根节点的子节点,更新所述树形结构数据。
97.本实施例中,构建装置中各模块、单元用于对应执行与上述树形结构数据的构建方法中的各个步骤,其具体实施过程在此不做详述。
98.本实施例提供的一种树形结构数据的装置,构建系统首先获取若干个节点数据,各节点数据均标注有节点id和节点父id,其中,节点id为节点数据的id,节点父id为节点数据对应的父节点数据的id。然后遍历所有节点数据,将具有相同节点父id的各节点数据归类为同一集合,得到若干个子节点数据集合。最后,构建系统再次遍历所有节点数据,以各节点数据为根节点,根据各节点数据的节点id筛选各个节点数据分别对应的子节点数据集合的元素作为子节点,构建得到树形结构数据。与现有技术相比,本技术避免使用递归方式构建树形结构数据所需要的系统堆栈,规避树形结构数据的层级过大时容易发生栈内存溢出的弊端,实现方式简单,可快速构建无限层级树结构。
99.参照图3,本技术实施例中还提供一种计算机设备,该计算机设备可以是服务器,其内部结构可以如图3所示。该计算机设备包括通过系统总线连接的处理器、存储器、网络
接口和数据库。其中,该计算机设计的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的数据库用于存储节点数据等数据。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种树形结构数据的构建方法。
100.上述处理器执行上述树形结构数据的构建方法的步骤:
101.s1:获取若干个节点数据,各所述节点数据均标注有节点id和节点父id,所述节点id为所述节点数据的id,所述节点父id为所述节点数据对应的父节点数据的id;
102.s2:遍历所有节点数据,将具有相同节点父id的各所述节点数据归类为同一集合,得到若干个子节点数据集合;
103.s3:再次遍历所有节点数据,以各所述节点数据为根节点,根据各所述节点数据的节点id筛选各所述节点数据分别对应的所述子节点数据集合的元素作为子节点,构建得到树形结构数据。
104.进一步的,所述再次遍历所有节点数据,以各所述节点数据为根节点,根据各所述节点数据的节点id筛选各所述节点数据分别对应的所述子节点数据集合的元素作为子节点,构建得到树形结构数据的步骤,包括:
105.s301:以排序第一的节点数据为根节点,根据所述排序第一的节点数据的节点id筛选对应的第一子节点数据集合的元素作为子节点,构建得到第一分支数据;
106.s302:依次以排序第二的节点数据为根节点,根据所述排序第二的节点数据的节点id筛选对应的第二节点数据集合的元素作为子节点,并判断所述第一分支数据的根节点数据是否为所述第二节点数据集合的元素,或者判断所述排序第二的节点数据是否为所述第一分支数据的子节点数据;
107.s303:若所述排序第一的节点数据为所述第二节点数据集合的元素,则根据所述排序第二的节点数据和所述第二节点数据集合的元素形成第二分支数据,并以所述第一分支数据的根节点数据作为所述第二分支数据的子节点数据,将所述第一分支数据合并到所述第二分支数据上,形成第三分支数据;
108.s304:若所述排序第二的节点数据为所述第一分支数据的子节点数据,则根据所述排序第二的节点数据和所述第二节点数据集合的元素形成第二分支数据,并以所述第二分支数据的根节点数据作为所述第一分支数据的子节点数据,将所述第二分支数据合并到所述第一分支数据上,形成第四分支数据;
109.s305:若所述第一分支数据的根节点数据不是所述第二节点数据集合的元素,且排序第二的节点数据不是所述第一分支数据的子节点数据,则根据所述排序第二的节点数据和所述第二节点数据集合的元素形成第二分支数据,保持所述第一分支数据和所述第二分支数据相互独立;
110.s306:按照上述规则遍历所有节点数据,逐次形成新的分支数据,并在现有的分支数据基础上合并新的分支数据,得到所述树形结构数据。
111.进一步的,所述再次遍历所有节点数据,以各所述节点数据为根节点,根据各所述节点数据的节点id筛选各所述节点数据分别对应的所述子节点数据集合的元素作为子节
点,构建得到树形结构数据的步骤,包括:
112.s307:以各所述节点数据为根节点,根据各所述节点数据的节点id筛选各所述节点数据分别对应的所述子节点数据集合的元素作为子节点,分别构建各节点数据各自对应的分支数据;
113.s308:遍历所有分支数据,以各所述分支数据的根节点数据的节点父id为合并基准,将各所述分支数据的根节点数据作为子节点合并到对应的分支数据上,形成完整的树形结构数据。
114.优选的的,所述以各所述节点数据为根节点,根据各所述节点数据的节点id筛选各所述节点数据分别对应的所述子节点数据集合的元素作为子节点,分别构建各节点数据各自对应的分支数据的步骤中,单个所述分支数据的合并步骤为:
115.s3081:获取第一分支数据的根节点数据的第一节点父id;
116.s3082:根据所述第一节点父id匹配得到所述根节点数据所在的第二分支数据;
117.s3083:将所述第一分支数据合并到所述第二分支数据上,合并时所述第一分支数据的根节点数据作为所述第二分支数据的子节点。
118.进一步的,所述遍历所有节点数据,将具有相同节点父id的各所述节点数据归类为同一集合,得到若干个子节点数据集合的步骤之后,包括:
119.s4将各所述子节点数据集合对应的节点父id作为标记信息,并分别将各所述标记信息与各所述子节点数据集合进行对应关联。
120.进一步的,所述再次遍历所有节点数据,以各所述节点数据的节点id为根节点,筛选各所述节点数据分别对应的所述子节点数据集合的元素作为子节点,构建得到若干个分支数据的步骤中,单个分支数据的构建步骤为:
121.s3071:获取第一节点数据的第一节点id;
122.s3072:从各所述子节点数据集合中,筛选与所述第一节点id相同的所述第二节点父id对应的第一子节点数据集合;
123.s3073:将所述第一子节点数据集合中的所有第二节点数据作为所述第一节点数据的子节点,构建得到所述分支数据。
124.进一步的,所述获取若干个节点数据的步骤之前,包括:
125.s5:获取原始数据,并获取所述原始数据的节点id和节点父id;
126.s6:将所述节点id标注在所述原始数据前端,并将所述节点父id标注在所述原始数据后端,形成所述节点数据。
127.进一步的,所述再次遍历所有节点数据,以各所述节点数据为根节点,根据各所述节点数据的节点id筛选各所述节点数据分别对应的所述子节点数据集合的元素作为子节点,构建得到树形结构数据的步骤之后,包括:
128.s7:监测是否录入第三节点数据,所述第三节点数据为新的节点数据;
129.s8:若监测到录入第三节点数据,则调取所述第三节点数据的第三节点父id,并根据所述第三节点父id匹配得到所述树形结构数据上对应的第一根节点;
130.s9:将所述第三节点数据作为所述第一根节点的子节点,更新所述树形结构数据。
131.本技术一实施例还提供一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现一种树形结构数据的构建方法,所述树形结构数据的构建方法
具体为:
132.s1:获取若干个节点数据,各所述节点数据均标注有节点id和节点父id,所述节点id为所述节点数据的id,所述节点父id为所述节点数据对应的父节点数据的id;
133.s2:遍历所有节点数据,将具有相同节点父id的各所述节点数据归类为同一集合,得到若干个子节点数据集合;
134.s3:再次遍历所有节点数据,以各所述节点数据为根节点,根据各所述节点数据的节点id筛选各所述节点数据分别对应的所述子节点数据集合的元素作为子节点,构建得到树形结构数据。
135.进一步的,所述再次遍历所有节点数据,以各所述节点数据为根节点,根据各所述节点数据的节点id筛选各所述节点数据分别对应的所述子节点数据集合的元素作为子节点,构建得到树形结构数据的步骤,包括:
136.s301:以排序第一的节点数据为根节点,根据所述排序第一的节点数据的节点id筛选对应的第一子节点数据集合的元素作为子节点,构建得到第一分支数据;
137.s302:依次以排序第二的节点数据为根节点,根据所述排序第二的节点数据的节点id筛选对应的第二节点数据集合的元素作为子节点,并判断所述第一分支数据的根节点数据是否为所述第二节点数据集合的元素,或者判断所述排序第二的节点数据是否为所述第一分支数据的子节点数据;
138.s303:若所述排序第一的节点数据为所述第二节点数据集合的元素,则根据所述排序第二的节点数据和所述第二节点数据集合的元素形成第二分支数据,并以所述第一分支数据的根节点数据作为所述第二分支数据的子节点数据,将所述第一分支数据合并到所述第二分支数据上,形成第三分支数据;
139.s304:若所述排序第二的节点数据为所述第一分支数据的子节点数据,则根据所述排序第二的节点数据和所述第二节点数据集合的元素形成第二分支数据,并以所述第二分支数据的根节点数据作为所述第一分支数据的子节点数据,将所述第二分支数据合并到所述第一分支数据上,形成第四分支数据;
140.s305:若所述第一分支数据的根节点数据不是所述第二节点数据集合的元素,且排序第二的节点数据不是所述第一分支数据的子节点数据,则根据所述排序第二的节点数据和所述第二节点数据集合的元素形成第二分支数据,保持所述第一分支数据和所述第二分支数据相互独立;
141.s306:按照上述规则遍历所有节点数据,逐次形成新的分支数据,并在现有的分支数据基础上合并新的分支数据,得到所述树形结构数据。
142.进一步的,所述再次遍历所有节点数据,以各所述节点数据为根节点,根据各所述节点数据的节点id筛选各所述节点数据分别对应的所述子节点数据集合的元素作为子节点,构建得到树形结构数据的步骤,包括:
143.s307:以各所述节点数据为根节点,根据各所述节点数据的节点id筛选各所述节点数据分别对应的所述子节点数据集合的元素作为子节点,分别构建各节点数据各自对应的分支数据;
144.s308:遍历所有分支数据,以各所述分支数据的根节点数据的节点父id为合并基准,将各所述分支数据的根节点数据作为子节点合并到对应的分支数据上,形成完整的树
形结构数据。
145.优选的的,所述以各所述节点数据为根节点,根据各所述节点数据的节点id筛选各所述节点数据分别对应的所述子节点数据集合的元素作为子节点,分别构建各节点数据各自对应的分支数据的步骤中,单个所述分支数据的合并步骤为:
146.s3081:获取第一分支数据的根节点数据的第一节点父id;
147.s3082:根据所述第一节点父id匹配得到所述根节点数据所在的第二分支数据;
148.s3083:将所述第一分支数据合并到所述第二分支数据上,合并时所述第一分支数据的根节点数据作为所述第二分支数据的子节点。
149.进一步的,所述遍历所有节点数据,将具有相同节点父id的各所述节点数据归类为同一集合,得到若干个子节点数据集合的步骤之后,包括:
150.s4将各所述子节点数据集合对应的节点父id作为标记信息,并分别将各所述标记信息与各所述子节点数据集合进行对应关联。
151.进一步的,所述再次遍历所有节点数据,以各所述节点数据的节点id为根节点,筛选各所述节点数据分别对应的所述子节点数据集合的元素作为子节点,构建得到若干个分支数据的步骤中,单个分支数据的构建步骤为:
152.s3071:获取第一节点数据的第一节点id;
153.s3072:从各所述子节点数据集合中,筛选与所述第一节点id相同的所述第二节点父id对应的第一子节点数据集合;
154.s3073:将所述第一子节点数据集合中的所有第二节点数据作为所述第一节点数据的子节点,构建得到所述分支数据。
155.进一步的,所述获取若干个节点数据的步骤之前,包括:
156.s5:获取原始数据,并获取所述原始数据的节点id和节点父id;
157.s6:将所述节点id标注在所述原始数据前端,并将所述节点父id标注在所述原始数据后端,形成所述节点数据。
158.进一步的,所述再次遍历所有节点数据,以各所述节点数据为根节点,根据各所述节点数据的节点id筛选各所述节点数据分别对应的所述子节点数据集合的元素作为子节点,构建得到树形结构数据的步骤之后,包括:
159.s7:监测是否录入第三节点数据,所述第三节点数据为新的节点数据;
160.s8:若监测到录入第三节点数据,则调取所述第三节点数据的第三节点父id,并根据所述第三节点父id匹配得到所述树形结构数据上对应的第一根节点;
161.s9:将所述第三节点数据作为所述第一根节点的子节点,更新所述树形结构数据。
162.本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储与一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本技术所提供的和实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可以包括只读存储器(rom)、可编程rom(prom)、电可编程rom(eprom)、电可擦除可编程rom(eeprom)或闪存。易失性存储器可包括随机存取存储器(ram)或者外部高速缓冲存储器。作为说明而非局限,ram通过多种形式可得,诸如静态ram(sram)、动态ram(dram)、同步dram(sdram)、双速据率sdram(ssrsdram)、增
强型sdram(esdram)、同步链路(synchlink)dram(sldram)、存储器总线(rambus)直接ram(rdram)、直接存储器总线动态ram(drdram)、以及存储器总线动态ram(rdram)等。
163.需要说明的是,在本文中,术语“包括”、“包含”或者其任何其它变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、装置、第一物体或者方法不仅包括那些要素,而且还包括没有明确列出的其它要素,或者是还包括为这种过程、装置、第一物体或者方法所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括该要素的过程、装置、第一物体或者方法中还存在另外的相同要素。
164.以上所述仅为本技术的优选实施例,并非因此限制本技术的专利范围,凡是利用本技术说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其它相关的技术领域,均同理包括在本技术的专利保护范围内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1