[发明专利]一种快速遍历树形结构的方法在审
申请号: | 201910974380.1 | 申请日: | 2019-10-14 |
公开(公告)号: | CN110704452A | 公开(公告)日: | 2020-01-17 |
发明(设计)人: | 程亚丽 | 申请(专利权)人: | 北京弘远博学科技有限公司 |
主分类号: | G06F16/22 | 分类号: | G06F16/22;G06F16/2458 |
代理公司: | 51248 成都市鼎宏恒业知识产权代理事务所(特殊普通合伙) | 代理人: | 陶光雨 |
地址: | 100010 北京*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 结点 查询 树形结构数据 数据库技术 统计数据库 存储过程 结点信息 名称获取 树形结构 数据库表 父结点 根结点 遍历 递归 分级 删除 存储 访问 | ||
本发明公开了一种快速遍历树形结构的方法,属于数据库技术领域,树形结构数据具有一个根结点和多个子孙结点,每个结点的结点信息包括结点id、结点名称、父结点id、结点左值和结点右值,将树形结构数据按左右值编码的方式存储到数据库表中,存储过程包括结点的查询、增加或删除;查询某结点的层数的方法如下,先根据结点名称获取结点id,然后根据结点id获取被查询结点的结点左值L1和结点右值R1,统计数据库表中结点左值小于或等于被查询结点的结点左值L1,并且结点右值大于或等于被查询结点的结点右值R1的结点数目,该结点数目即为被查询结点所在层数。其操作方便,访问速度快,在消除递归的前提下实现了无限分级。
技术领域
本发明属于数据库技术领域,具体涉及一种快速遍历树形结构的方法。
背景技术
在数据库项目中,经常会用到树形结构的数据,在使用树形结构中,用到最多的查询就是查询一个结点的所有子结点或者查询一个结点的所有父结点等,该过程中往往需要用到递归进行查找,就需要我们自己动手去写递归。
在使用树形结构查询的时候主要有以下问题:(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为空值。
本发明的有益效果为:
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京弘远博学科技有限公司,未经北京弘远博学科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201910974380.1/2.html,转载请声明来源钻瓜专利网。