CN111767285A - 一种快速判断节点关系的方法 - Google Patents
一种快速判断节点关系的方法 Download PDFInfo
- Publication number
- CN111767285A CN111767285A CN202010607667.3A CN202010607667A CN111767285A CN 111767285 A CN111767285 A CN 111767285A CN 202010607667 A CN202010607667 A CN 202010607667A CN 111767285 A CN111767285 A CN 111767285A
- Authority
- CN
- China
- Prior art keywords
- node
- nodes
- value
- tree
- values
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2246—Trees, e.g. B+trees
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及树形数据处理领域,公开了一种快速判断节点关系的方法,以便于树不在完整结构的情况下,快速判断任意两个节点间的关系。本发明对树中的节点增加一个记录该节点在树中位置信息的索引值,增加索引值时可以基于索引值长度、分段数量以及单个分段需要的字符数,依次生成树中各节点的索引值,其中:根节点的每一个分段值均为默认值,且根节点只用一个字符表示;每个节点所在分段前的值与父节点相同;每个节点所在分段后的值为默认值;同层级的节点,其分段的值依次递增。当需要判断两个节点的关系时,通过比较两个节点的索引值快速得出两个节点的关系。本发明适用于在树形数据结构中的节点关系判断。
Description
技术领域
本发明涉及树形数据处理领域,特别涉及一种快速判断节点关系的方法。
背景技术
树是一种常用的数据结构,通常节点中会保存父级节点和子节点的信息,在持久化保存一棵树时,记录其父节点即可。在持久化保存形式,需要使用树时,读取出所有节点的信息,并根据父节点信息重新将树组装出来,最后根据需要对树进行操作。
普通形式保存的树结构,在使用时,需要将所有节点取出还原再使用;同时将树保存在数据库中时,如果需要查询一个节点的相关节点,如所有后代节点,操作会十分麻烦。
发明内容
本发明要解决的技术问题是:提供一种快速判断节点关系的方法,以便于树不在完整结构的情况下,快速判断任意两个节点间的关系。
为解决上述问题,本发明采用的技术方案是:对树中的节点增加一个记录该节点在树中位置信息的索引值,当需要判断两个节点的关系时,通过比较两个节点的索引值得出两个节点的关系。
进一步的,本发明对节点增加索引值的步骤可如下:
任意选定一个索引值中单个字符的取值范围[min,max],该范围包含n个取值,且该范围的最小值min为默认值;
遍历树得到树的度m和树深度d;
根据树的度m以及上述的n计算索引值的单个分段需要的字符数x:
根据树深度d确定索引值的分段数量s;
根据索引值的单个分段需要的字符数x和分段数量s计算索引值长度L;
以索引值长度L、分段数量s以及单个分段需要的字符数x为基础,依次生成树中各节点的索引值,其中:根节点的每一个分段值均为默认值;每个节点所在分段前的值与父节点相同;每个节点所在分段后的值为默认值;同层级的节点,其分段的值依次递增。
进一步的,如果索引值的单个分段需要的字符数x大于1,由于一棵树只有一个根节点,因此使用一个字符即可表示,本发明为了减少字数,根节点所在分段可以使用一个字符表示。例如,索引值有3个分段,每个分段用2个字符,每个字符的默认值为0,则根节点的索引值可以是00000,这样可以比000000节省一个字符。
具体的,本发明计算单个分段需要的字符数的公式可以为:
其中,floor()是向下取整函数。
具体的,本发明计算索引值长度的公式可以为:L=1+(d-1)*x。
进一步的,本发明通过比较两个节点的索引值得出两个节点的关系的具体步骤可包括:
依次将两个节点的本层级分段值及本层级分段之前的分段值置为默认值,得到两个节点的各级祖先节点的索引值;
如果两个节点为同层级的节点,且他们的各级祖先节点的索引值均相同,则这两个节点是兄弟节点;
如果两个节点为不同层级的节点,其中节点X的层级大于节点Y的层级,则将节点X的本层级分段之后的值均置为最大值得到子孙节点索引值上限,并在(本节点索引值,子孙节点索引值上限]范围内搜索是否存在节点Y,如果存在,则节点Y为节点X的子孙节点。
本发明的有益效果是:由于本发明在保存一棵树时,对树中的节点增加一个索引值,使得树中各个节点均具有记录该节点在树中的位置信息的索引值,因此当需要判断两个节点的关系时,通过比较两个节点的索引值即可快速得出两个节点的关系,即使树不在完整结构的情况下,也可以得到树的信息和判断任意两个节点间的关系。
附图说明
图1是实施例对节点增加索引值的示意图。
具体实施方式
为了解决树不在完整结构的情况下,判断任意两个节点的关系的问题,本发明提供了一种快速判断节点关系的方法,可以在保存一棵树时,对树中的节点增加一个记录该节点在树中位置信息的索引值,当需要判断两个节点的关系时,通过比较两个节点的索引值快速得出两个节点的关系。
在具体介绍本发明之前,这里先简单介绍一下本发明会用到的树形数据结构的几个概念。
树:树是由y(y>=0)个有限节点组成一个具有层次关系的集合,它是一种非线性的数据结构。树的度:树内各节点的度的最大值。节点的度:一个节点含有的子树的个数称为该节点的度。树的深度或高度:树中节点的最大层次。子孙:以某节点为根的子树中任一节点都称为该节点的子孙。节点的祖先:从根到该节点所经分支上的所有节点。父节点:若一个节点含有子节点,则这个节点称为其子节点的父节点。兄弟节点:具有相同父节点的节点互称为兄弟节点。
当树的结构固定时,索引的结构与大小也随之确定。索引值由分段的字符串组成,每一段代表相应节点在其层级中的位置,从左往右层级依次增加,索引中最后的非默认值分段代表本节点在其层级中位置,子孙节点的值为默认值。本发明对节点增加索引值的具体步骤如下:
1、任意选定一个索引值中单个字符的取值范围[min,max],该范围包含n个取值,且该范围的最小值min为默认值。例如单个字符的取值范围为[0,1,2,3],这样n就是4,min就是0;若单个字符的取值范围为[1,3,5,7,9],这样n就是5,min就是1。
2、遍历树得到树的度m和树深度d。
4、根据树深度d确定索引值的分段数量s,在本发明中分段数量与树深度相等,即s=d。
5、根据索引值的单个分段需要的字符数x和分段数量s计算索引值长度L,公式为:L=1+(s-1)*x。
6、以索引值长度L、分段数量s以及单个分段需要的字符数x为基础,依次生成树中各节点的索引值,其中:根节点的每一个分段值均为默认值;每个节点所在分段前的值与父节点相同;每个节点所在分段后的值为默认值;同层级的节点,其分段的值依次递增。
本发明比较两个节点的索引值得出两个节点的关系的具体步骤包括:
1、依次将两个节点的本层级分段值及本层级分段之前的分段值置为默认值,得到两个节点的各级祖先节点的索引值;
2、如果两个节点为同层级的节点,且他们的各级祖先节点的索引值均相同,则这两个节点是兄弟节点;
3、如果两个节点为不同层级的节点,其中节点X的层级大于节点Y的层级,则将节点X的本层级分段之后的值均置为最大值得到子孙节点索引值上限,并在(本节点索引值,子孙节点索引值上限]范围内搜索是否存在节点Y,如果存在,则节点Y为节点X的子孙节点。
实施例
如图1所示,一棵高度为3的树,树的度为2;确定的索引字符取值范围为[0,1,2],即有n=3,默认值为0;
生成根节点索引值时:根节点A的3个分段的值均为默认值0,故索引值为000;对于根节点A的第一个子节点B而言,节点B的第一个分段值=根节点分段值=0,同时节点B为兄弟中的第一个节点,故取值1,节点位置已确定,后续分段设为默认值0,故节点B是索引值为010。由于本发明在生成索引值同层级的节点时,其分段的值依次递增,因此根节点A的第二个子节点C的索引值020。按照本发明的生成节点索引值的原理,可依次得节点D、E、F的的索引值为011、012、013。
比较两个节点的索引值时:
以节点F(索引值021)为例,将节点F的本层级分段值及本层级分段之前的分段值置为默认值,依次可得其祖先节点C、A的索引值020、000;
以节点C(索引值020)为例,其子孙节点索引范围是(020,022],由于索引值021在(020,022]范围内,故索引值为021的节点F是节点C的子孙节点:
以节点C为例,节点B与节点C同层级,且他们的父节点均为节点A(索引值000),故他们互为兄弟节点。
Claims (6)
1.一种快速判断节点关系的方法,其特征在于:对树中的节点增加一个记录该节点在树中位置信息的索引值,当需要判断两个节点的关系时,通过比较两个节点的索引值得出两个节点的关系。
2.如权利要求1所述一种快速判断节点关系的方法,其特征在于:对节点增加索引值的步骤如下:
任意选定一个索引值中单个字符的取值范围[min,max],该范围包含n个取值,且该范围的最小值min为默认值;
遍历树得到树的度m和树深度d;
根据树的度m以及上述的n计算索引值的单个分段需要的字符数x:
根据树深度d确定索引值的分段数量s;
根据索引值的单个分段需要的字符数x和分段数量s计算索引值长度L;
以索引值长度L、分段数量s以及单个分段需要的字符数x为基础,依次生成树中各节点的索引值,其中:根节点的每一个分段值均为默认值;每个节点所在分段前的值与父节点相同;每个节点所在分段后的值为默认值;同层级的节点,其分段的值依次递增。
3.如权利要求2所述一种快速判断节点关系的方法,其特征在于:根节点所在分段使用一个字符表示。
5.如权利要求2所述一种快速判断节点关系的方法,其特征在于:计算索引值长度的公式为:L=1+(s-1)*x。
6.如权利要求2所述一种快速判断节点关系的方法,其特征在于:通过比较两个节点的索引值得出两个节点的关系的具体步骤包括:
依次将两个节点的本层级分段值及本层级分段之前的分段值置为默认值,得到两个节点的各级祖先节点的索引值;
如果两个节点为同层级的节点,且他们的各级祖先节点的索引值均相同,则这两个节点是兄弟节点;
如果两个节点为不同层级的节点,其中节点X的层级大于节点Y的层级,则将节点X的本层级分段之后的值均置为最大值得到子孙节点索引值上限,并在(本节点索引值,子孙节点索引值上限]范围内搜索是否存在节点Y,如果存在,则节点Y为节点X的子孙节点。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010607667.3A CN111767285A (zh) | 2020-06-29 | 2020-06-29 | 一种快速判断节点关系的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010607667.3A CN111767285A (zh) | 2020-06-29 | 2020-06-29 | 一种快速判断节点关系的方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111767285A true CN111767285A (zh) | 2020-10-13 |
Family
ID=72724236
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010607667.3A Pending CN111767285A (zh) | 2020-06-29 | 2020-06-29 | 一种快速判断节点关系的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111767285A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116680252A (zh) * | 2023-06-13 | 2023-09-01 | 智研汇(上海)科技有限公司 | 树形数据结构及其节点批量移动方法 |
-
2020
- 2020-06-29 CN CN202010607667.3A patent/CN111767285A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116680252A (zh) * | 2023-06-13 | 2023-09-01 | 智研汇(上海)科技有限公司 | 树形数据结构及其节点批量移动方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US5649023A (en) | Method and apparatus for indexing a plurality of handwritten objects | |
US7739251B2 (en) | Incremental maintenance of an XML index on binary XML data | |
US7937399B2 (en) | Method, information processing apparatus, and program of searching for, aggregating and sorting trees | |
CN108304409B (zh) | 一种基于进位的Sketch数据结构的数据频度估计方法 | |
CN102693266B (zh) | 搜索数据库的方法、生成索引结构的导航设备和方法 | |
CN109902142B (zh) | 一种基于编辑距离的字符串模糊匹配和查询方法 | |
CN111581215B (zh) | 数组树数据储存方法、快速查找方法及可读储存介质 | |
CN113434557B (zh) | 一种标签数据的范围查询方法、装置、设备及存储介质 | |
CN110427471B (zh) | 一种基于知识图谱的自然语言问答方法及*** | |
US20230281182A1 (en) | R-tree index merging and updating method and apparatus based on hilbert curve, and medium | |
CN111984732B (zh) | 在区块链上实现去中心化检索的方法、节点及区块链网络 | |
CN115688779B (zh) | 一种基于自监督深度学习的地址识别方法 | |
CN110134901B (zh) | 一种基于流量分析的多链路网页篡改判定方法 | |
CN111767285A (zh) | 一种快速判断节点关系的方法 | |
CN114722139A (zh) | 可自适应动态伸缩的时空多属性索引方法及其检索方法 | |
CN110245248B (zh) | 一种遥感影像关键字查询方法 | |
CN115840751B (zh) | 一种新型树状数据的编码方法 | |
CN109299106B (zh) | 数据查询方法和装置 | |
CN115269745B (zh) | 一种关系型数据至图数据映射方法、设备及存储介质 | |
CN115062206B (zh) | 一种网页元素的搜索方法和电子设备 | |
JP2013069042A (ja) | 情報処理装置及び情報処理プログラム | |
CN116010664A (zh) | 基于mptt和双亲查找的数据处理方法及*** | |
CN116501834A (zh) | 地址信息处理方法、装置、移动终端及存储介质 | |
CN115757896A (zh) | 向量检索方法、装置、设备及可读存储介质 | |
CN107463676B (zh) | 文本数据存储方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |