CN110704452A - 一种快速遍历树形结构的方法 - Google Patents

一种快速遍历树形结构的方法 Download PDF

Info

Publication number
CN110704452A
CN110704452A CN201910974380.1A CN201910974380A CN110704452A CN 110704452 A CN110704452 A CN 110704452A CN 201910974380 A CN201910974380 A CN 201910974380A CN 110704452 A CN110704452 A CN 110704452A
Authority
CN
China
Prior art keywords
node
value
tree structure
father
right value
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
Application number
CN201910974380.1A
Other languages
English (en)
Inventor
程亚丽
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Hongyuan Erudite Technology Co Ltd
Original Assignee
Beijing Hongyuan Erudite Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Beijing Hongyuan Erudite Technology Co Ltd filed Critical Beijing Hongyuan Erudite Technology Co Ltd
Priority to CN201910974380.1A priority Critical patent/CN110704452A/zh
Publication of CN110704452A publication Critical patent/CN110704452A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2228Indexing structures
    • G06F16/2246Trees, e.g. B+trees
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2282Tablespace storage structures; Management thereof
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2458Special types of queries, e.g. statistical queries, fuzzy queries or distributed queries
    • G06F16/2462Approximate or statistical queries

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Databases & Information Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Software Systems (AREA)
  • Probability & Statistics with Applications (AREA)
  • Fuzzy Systems (AREA)
  • Mathematical Physics (AREA)
  • Computational Linguistics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种快速遍历树形结构的方法,属于数据库技术领域,树形结构数据具有一个根结点和多个子孙结点,每个结点的结点信息包括结点id、结点名称、父结点id、结点左值和结点右值,将树形结构数据按左右值编码的方式存储到数据库表中,存储过程包括结点的查询、增加或删除;查询某结点的层数的方法如下,先根据结点名称获取结点id,然后根据结点id获取被查询结点的结点左值L1和结点右值R1,统计数据库表中结点左值小于或等于被查询结点的结点左值L1,并且结点右值大于或等于被查询结点的结点右值R1的结点数目,该结点数目即为被查询结点所在层数。其操作方便,访问速度快,在消除递归的前提下实现了无限分级。

Description

一种快速遍历树形结构的方法
技术领域
本发明属于数据库技术领域,具体涉及一种快速遍历树形结构的方法。
背景技术
在数据库项目中,经常会用到树形结构的数据,在使用树形结构中,用到最多的查询就是查询一个结点的所有子结点或者查询一个结点的所有父结点等,该过程中往往需要用到递归进行查找,就需要我们自己动手去写递归。
在使用树形结构查询的时候主要有以下问题:(1)在查询的过程中,频繁的“递归”操作,递归过程不断地访问数据库,导致访问速度会比较慢。(2)递归算法需要自己手动编写,不仅编写不方便,而且编写成本高,维护风险也较高。
发明内容
本发明实施方式的目的在于提供一种快速遍历树形结构的方法,其操作方便,访问速度快,在消除递归的前提下实现了无限分级。
本发明的实施方式是这样实现的:
本发明的实施方式提供了一种快速遍历树形结构的方法,树形结构数据具有一个根结点和多个子孙结点,每个结点的结点信息包括结点id、结点名称、父结点id、结点左值和结点右值,将树形结构数据按左右值编码的方式存储到数据库表中,存储过程包括结点的查询、增加或删除;
查询某结点的层数的方法如下:
先根据结点名称获取结点id,然后根据结点id获取被查询结点的结点左值L1和结点右值R1,统计数据库表中结点左值小于或等于被查询结点的结点左值L1,并且结点右值大于或等于被查询结点的结点右值R1的结点数目,该结点数目即为被查询结点所在层数。
进一步的,查询某个结点的所有子孙结点的方法如下:
先根据结点名称获取结点id,然后根据结点id获取被查询结点的结点左值L2和结点右值R2,统计结点左值或结点右值介于被查询结点的结点左值L2和结点右值R2之间的所有结点,即为被查询结点的子孙结点。
进一步的,查询某个结点的父结点的方法如下:
先根据结点名称获取被查询结点的父结点id,根据父结点id即可查询到被查询结点的父结点信息。
进一步的,在某个结点下增加一个子孙结点的方法如下:
根据新增结点的父结点的结点id,获取新增结点的父结点的结点右值R3,将树形结构数据中大于或等于R3的所有结点左值和结点右值分别加2,将R3作为新增结点的结点左值,将R3+1作为新增结点的结点右值,将新增结点的父结点的结点id作为新增结点的父结点id。
进一步的,删除一个结点的方法如下:
获取要删除结点的结点右值R4和要删除结点的子孙结点,根据结点id删除要删除的结点以及要删除的结点的所有子孙结点,最后将树形结构数据中所有大于R4的结点左值和结点右值都减2即可。
进一步的,所述根结点作为结点的起点,所述根结点的结点左值为1,所述根结点的父结点id为空值。
本发明的有益效果为:
本发明实施方式提供的快速遍历树形结构的方法,其操作方便,访问速度快,在消除递归的前提下实现了无限分级,而且查询条件是基于整形数字比较的,效率很高,可以进行先序列表,添加,删除等常规操作,而且添加、删除方便,维护风险低。
附图说明
图1为本发明实施方式提供的树形结构的结构示意图;
图2为新增结点后的树形结构示意图。
具体实施方式
为使本发明实施方式的目的、技术方案和优点更加清楚,下面将结合本发明实施方式中的附图,对本发明实施方式中的技术方案进行清楚、完整地描述,显然,所描述的实施方式是本发明一部分实施方式,而不是全部的实施方式。通常在此处附图中描述和示出的本发明实施方式的组件可以以各种不同的配置来布置和设计。
因此,以下对在附图中提供的本发明的实施方式的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施方式。基于本发明中的实施方式,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施方式,都属于本发明保护的范围。
需要说明的是,在不冲突的情况下,本发明中的实施方式及实施方式中的特征可以相互组合。
本发明实施方式提供了一种快速遍历树形结构的方法,具体操作方法如下:
参考图1所示,树形结构数据具有多个结点,其中包括一个根结点和多个子孙结点,每个结点的结点信息包括结点id(node_id)、结点名称(node_name)、父结点id(parent_node_id)、结点左值(left_value)和结点右值(right_value)。
其中,根结点作为结点的起点,根结点的结点左值为1,根结点的父结点id为空值。
将树形结构数据按左右值编码的方式存储到数据库表中(如表1所示),存储过程包括结点的查询、增加或删除。
表1
Figure BDA0002233127910000041
(1)查询某结点的层数的方法如下:
先根据结点名称获取结点id,然后根据结点id获取被查询结点的结点左值L1和结点右值R1,统计数据库表中结点左值小于或等于被查询结点的结点左值L1,并且结点右值大于或等于被查询结点的结点右值R1的结点数目,该结点数目即为被查询结点所在层数。
例如,要查询“女装”所在的层数,已知“女装”的node_id=n2,操作步骤如下:
A、根据“女装”的node_id=n2,先获取被查询结点“女装”的结点左值和结点右值。
对应的查询语句是:SELECT left_value,right_value FROM Tree where node_id="n2";
获取到的结果是:left_value=2,right_value=15。
B、统计结点左值小于或等于2,并且结点右值大于或等于15的结点数目是多少。
对应的查询语句是:SELECT count(*)from Tree WHERE left_value<=2 ANDright_value>=15;
获取到的结果是:2
因此,最后获取到的2就是被查询结点所在的层数。
(2)查询某个结点的所有子孙结点的方法如下:
先根据结点名称获取结点id,然后根据结点id获取被查询结点的结点左值L2和结点右值R2,统计结点左值或结点右值介于被查询结点的结点左值L2和结点右值R2之间的所有结点,即为被查询结点的子孙结点。
例如,请求查询“女装”的所有子孙结点,已知“女装”的node_id=n2,操作步骤如下:
A、根据“女装”的node_id=n2,先获取被查询结点“女装”的结点左值和结点右值。
对应的查询语句是:SELECT left_value,right_value FROM Tree where node_id="n2";
获取到的结果是:left_value=2,right_value=15。
B、统计结点左值或结点右值介于2和15之间的所有结点。
对应的查询语句是:SELECT*FROM Tree left_value>2 AND left_value<15;
获取到的结果如表2所示,表2中的数据都是被查询结点“女装”的所有子孙结点。
表2
Figure BDA0002233127910000061
(3)查询某个结点的父结点的方法如下:
先根据结点名称获取被查询结点的父结点id,根据父结点id即可查询到被查询结点的父结点信息。
例如,查询“牛仔裤”的父结点,已知条件是“牛仔裤”的node_id=n7,操作步骤如下:
A、根据“牛仔裤”的node_id=n7,先获取被查询结点“牛仔裤”的父结点的结点值。
对应的查询语句是:SELECT parent_node_id FROM Tree where node_id="n7";
获取到的结果是:n6
B、查询结点值等于n6的结点。
对应的查询语句是:SELECT*FROM Tree where node_id="n6";
获取到的结果如表3所示,表3查询到的结果就是“牛仔裤”这个结点的父结点。
表3
Figure BDA0002233127910000071
(4)在某个结点下增加一个子孙结点的方法如下:
根据新增结点的父结点的结点id,获取新增结点的父结点的结点右值R3,将树形结构数据中大于或等于R3的所有结点左值和结点右值分别加2,将R3作为新增结点的结点左值,将R3+1作为新增结点的结点右值,将新增结点的父结点的结点id作为新增结点的父结点id。
例如,在“上衣”下添加一个结点“衬衫”,已知条件是“上衣”的node_id=n10,操作步骤如下:
A、根据结点“上衣”的node_id=n10,先获取结点“上衣”的结点右值为18;
B、将树形中所有结点左值或者结点右值大于等于父结点“上衣”的结点右值18的结点都+2;
C、将父结点“上衣”的结点右值18作为新增结点“衬衫”的结点左值,将“上衣”的结点右值18+1作为新增结点的结点右值,将父结点“上衣”的node_id作为新增的结点“衬衫”的父结点id(parent_node_id)。
得到的树形结构图如图2所示。
(5)删除一个结点的方法如下:
获取要删除结点的结点右值R4和要删除结点的子孙结点,根据结点id删除要删除的结点以及要删除的结点的所有子孙结点,最后将树形结构数据中所有大于R4的结点左值和结点右值都减2即可。
例如,请求删除一个结点“衬衫”,已知条件是“衬衫”的node_id=n12,操作步骤如下:
A、查找要删除节点“衬衫”的结点右值为19;
B、查找要删除结点“衬衫”的所有子孙结点;
C、将“衬衫”的结点id(node_id=n12)以及“衬衫”的所有子孙结点的node_id删除;
D、将所有大于“衬衫”的结点右值19的结点左值(left_value)和结点右值(right_value)都减2即可。
本发明不局限于上述可选实施方式,任何人在本发明的启示下都可得出其他各种形式的产品,但不论在其形状或结构上作任何变化,凡是落入本发明权利要求界定范围内的技术方案,均落在本发明的保护范围之内。

Claims (6)

1.一种快速遍历树形结构的方法,其特征在于:
树形结构数据具有一个根结点和多个子孙结点,每个结点的结点信息包括结点id、结点名称、父结点id、结点左值和结点右值,将树形结构数据按左右值编码的方式存储到数据库表中,存储过程包括结点的查询、增加或删除;
查询某结点的层数的方法如下:
先根据结点名称获取结点id,然后根据结点id获取被查询结点的结点左值L1和结点右值R1,统计数据库表中结点左值小于或等于被查询结点的结点左值L1,并且结点右值大于或等于被查询结点的结点右值R1的结点数目,该结点数目即为被查询结点所在层数。
2.根据权利要求1所述的快速遍历树形结构的方法,其特征在于:查询某个结点的所有子孙结点的方法如下:
先根据结点名称获取结点id,然后根据结点id获取被查询结点的结点左值L2和结点右值R2,统计结点左值或结点右值介于被查询结点的结点左值L2和结点右值R2之间的所有结点,即为被查询结点的子孙结点。
3.根据权利要求1所述的快速遍历树形结构的方法,其特征在于:查询某个结点的父结点的方法如下:
先根据结点名称获取被查询结点的父结点id,根据父结点id即可查询到被查询结点的父结点信息。
4.根据权利要求1所述的快速遍历树形结构的方法,其特征在于:在某个结点下增加一个子孙结点的方法如下:
根据新增结点的父结点的结点id,获取新增结点的父结点的结点右值R3,将树形结构数据中大于或等于R3的所有结点左值和结点右值分别加2,将R3作为新增结点的结点左值,将R3+1作为新增结点的结点右值,将新增结点的父结点的结点id作为新增结点的父结点id。
5.根据权利要求1所述的快速遍历树形结构的方法,其特征在于:删除一个结点的方法如下:
获取要删除结点的结点右值R4和要删除结点的子孙结点,根据结点id删除要删除的结点以及要删除的结点的所有子孙结点,最后将树形结构数据中所有大于R4的结点左值和结点右值都减2即可。
6.根据权利要求1所述的快速遍历树形结构的方法,其特征在于:所述根结点作为结点的起点,所述根结点的结点左值为1,所述根结点的父结点id为空值。
CN201910974380.1A 2019-10-14 2019-10-14 一种快速遍历树形结构的方法 Pending CN110704452A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910974380.1A CN110704452A (zh) 2019-10-14 2019-10-14 一种快速遍历树形结构的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910974380.1A CN110704452A (zh) 2019-10-14 2019-10-14 一种快速遍历树形结构的方法

Publications (1)

Publication Number Publication Date
CN110704452A true CN110704452A (zh) 2020-01-17

Family

ID=69199381

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910974380.1A Pending CN110704452A (zh) 2019-10-14 2019-10-14 一种快速遍历树形结构的方法

Country Status (1)

Country Link
CN (1) CN110704452A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111339245A (zh) * 2020-03-03 2020-06-26 腾讯云计算(北京)有限责任公司 数据存储方法、装置、存储介质及设备

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101706820A (zh) * 2009-12-10 2010-05-12 金蝶软件(中国)有限公司 物料清单存储方法及装置、查询方法及装置
CN106294545A (zh) * 2016-07-22 2017-01-04 中国农业银行股份有限公司 一种树形结构数据的访问方法及装置

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101706820A (zh) * 2009-12-10 2010-05-12 金蝶软件(中国)有限公司 物料清单存储方法及装置、查询方法及装置
CN106294545A (zh) * 2016-07-22 2017-01-04 中国农业银行股份有限公司 一种树形结构数据的访问方法及装置

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111339245A (zh) * 2020-03-03 2020-06-26 腾讯云计算(北京)有限责任公司 数据存储方法、装置、存储介质及设备
CN111339245B (zh) * 2020-03-03 2023-05-02 腾讯云计算(北京)有限责任公司 数据存储方法、装置、存储介质及设备

Similar Documents

Publication Publication Date Title
US11893022B2 (en) Computer-implemented method for improving query execution in relational databases normalized at level 4 and above
US20190384753A1 (en) Method and/or system for transforming between trees and arrays
US11275740B2 (en) Efficient use of trie data structure in databases
US5924088A (en) Index selection for an index access path
US6105018A (en) Minimum leaf spanning tree
US5974408A (en) Method and apparatus for executing a query that specifies a sort plus operation
CN111190904B (zh) 一种图-关系数据库混合存储的方法和装置
US20150106382A1 (en) Tables With Unlimited Number Of Sparse Columns And Techniques For An Efficient Implementation
CN110928882B (zh) 一种基于改进红黑树的内存数据库索引方法及系统
WO2015010509A1 (zh) 一种基于一维线性空间实现Trie树的词典检索方法
CN113918605A (zh) 数据查询方法、装置、设备以及计算机存储介质
KR101255639B1 (ko) 컬럼 기반 데이터베이스 시스템 및 데이터베이스 시스템의 조인 인덱스를 이용한 조인 처리 방법
RU2004131664A (ru) Способ и устройство для обращения с запросом к реляционным базам данных
CN110704452A (zh) 一种快速遍历树形结构的方法
CN109885570A (zh) 一种辅助索引结合散列表的多维范围查询方法
CN113297204B (zh) 索引生成方法及装置
CN115840751B (zh) 一种新型树状数据的编码方法
CN110990423B (zh) Sql语句的执行方法、装置、设备和存储介质
Bhattacharya et al. Caching stars in the sky: a semantic caching approach to accelerate skyline queries
CN108874849B (zh) 一种非等值关联子查询的优化方法和系统
CN112463837A (zh) 一种关系型数据库数据存储查询方法
JP6828334B2 (ja) データベース管理装置、データベース管理システム、データベース管理方法、および、データベース管理プログラム
CN114090570B (zh) 一种基于基数树与哈希表结合的数据存储方法及装置
Barg et al. A fast and versatile path index for querying semi-structured data
CN104021169A (zh) 一种基于SDD-1算法的Hive连接查询方法

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
RJ01 Rejection of invention patent application after publication
RJ01 Rejection of invention patent application after publication

Application publication date: 20200117