一种平衡二叉树的非递归高性能构建方法技术

技术编号:29872942 阅读:12 留言:0更新日期:2021-08-31 23:47
本发明专利技术公开了一种平衡二叉树的非递归高性能构建方法,属于计算机基础算法技术领域,包括建立数据库服务器、节点增加服务器、节点删除服务器和平衡二叉树构建服务器,在构建AVL树时,对于AVL树的失衡调整包括右旋调整、左旋调整、先左旋再右旋调整和先右旋再左旋调整,解决了采用非递归方法实现了AVL树的增加、删除和查询的操作的技术问题,本发明专利技术对于项目中需要用到AVL树的查询场合,可以以类似于红黑树生成的效率生成AVL树,以比红黑树高10%左右的查询效率进行数据查询,生成树效率比红黑树算法没有大的优势,可以应用在对生成数据时间稍微不敏感但对查询速度有很高要求的场合,算法耗时也比递归算法大幅降低。

【技术实现步骤摘要】
一种平衡二叉树的非递归高性能构建方法
本专利技术属于计算机基础算法
,涉及一种平衡二叉树的非递归高性能构建方法。
技术介绍
平衡二叉树(AVL树)是计算机基础数据结构中常用的一种数据结构。该数据结构要求树中任意一节点左右子树的高度差不超过1。虽然现在的计算机工程应用中红黑树以其更方便高效的插入删除操作和多数情况下接近平衡二叉树的查找效率,在绝大多数场合代替了平衡二叉树,使得平衡二叉树更多的出现在数据结构的教学场合。但在某些对查询速率要求非常苛刻的场合,平衡二叉树还是最优的数据结构选择。目前绝大多数关于平衡二叉树的算法都是递归实现的,或者以平衡二叉树的定义分别计算左右子树的高度并求高度差来对子树进行旋转平衡。这样的算法在树节点数超过一定数量的规模后,效率和算法复杂度最终会让代码失去实际的工程可用性。在基于HASH表的NOSQL数据库中,当数据量到达一定量级后,处理hash节点的重复数据就变得不可避免。在传统的方法中,一般使用链表将重复节点的数据串联起来,由于链表本身的数据是无序排列的,所以查询的时候需要从链表头开始遍历直到找到所需数据为止。这种情况在数据量低的时候对系统性能影响不大,一旦重复节点的纪录数变多会严重影响性能。
技术实现思路
本专利技术为解决上述技术问题,本专利技术的目的是提供一种平衡二叉树的非递归高性能构建方法,解决了采用非递归方法实现了AVL树的增加、删除和查询的操作的技术问题。为实现上述目的,本专利技术采用如下技术方案:一种平衡二叉树的非递归高性能构建方法,建立数据库服务器、节点增加服务器、节点删除服务器和平衡二叉树构建服务器,在数据库服务器中建立HASH表的NOSQL数据库并提供节点查询功能;节点增加服务器用于接收新插入的数据,并在新数据插入的时候判断新插入的数据的节点链表的总数据量:若总数据量到达预设新增限值,则通知平衡二叉树构建服务器进行平衡二叉树的构建;反之则在原有的平衡二叉树上增加节点;节点删除服务器用于在删除数据的时候,判断若节点数据结构为平衡二叉树,则删除完毕判断树的总节点数,若总节点数小于预设删除限值,则重新将平衡二叉树转化为链表;平衡二叉树构建服务器用于在接收到节点增加服务器的通知后,进行构建平衡二叉树,并通知数据库服务器根据构建的平衡二叉树进行数据存储。平衡二叉树构建服务器根据平衡因子的计算与失衡节点的翻转调整方法构建平衡二叉树,具体包括:对于平衡因子的定义为右子树高减去左子树高;对于平衡二叉树来说,平衡因子的取值范围为-1、0和1;初始节点为0,若增加左子树节点,则平衡因子为-1,若增加右子树节点,则平衡因子为1;若平衡因子变化为-2或者2,则触发平衡旋转;对于AVL树的失衡调整包括右旋调整、左旋调整、先左旋再右旋调整和先右旋再左旋调整;设定平衡因子的表示方法以bf_nodename为准,xnode的平衡因子名称即为bf_xnode,ynode的平衡因子名称即为bf_ynode,znode的平衡因子名称即为bf_znode;右旋调整的计算方法如下:bf_znode=bf_znode–(bf_ynode–1);bf_ynode=bf_ynode+1;左旋调整的计算方法如下:bf_znode=bf_znode–(bf_yndoe+1);bf_ynode=bf_ynode–1;先左旋再右旋调整的计算方法如下:bf_ynode=-(bf_xnode×bf_xnode+bf_xnode)÷2;bf_znode=(bf_xnode×bf_xnode–bf_xnode)÷2;bf_xnode=0;先右旋再左旋调整的计算方法如下:bf_ynode=(bf_xnode×bf_xnode-bf_xnode)÷2;bf_znode=-(bf_xnode×bf_xnode+bf_xnode)÷2;bf_xnode=0。优选的,节点增加服务器在增加节点时,按照平衡二叉树先搜索新增节点所需位置,即从根节点开始,如果新增节点比当前节点小,则当前节点改为被比较节点的左子节点,如果大,则为右子节点;再将新增节点与当前节点比较,周而复始直到当前节点的下个遍历节点为空,则新增节点会替代当前节点的空节点;节点增加后,重新计算所涉及到节点的平衡因子。优选的,节点删除服务器在删除节点时,首选区分被删节点是否为叶子节点,如果不是则需要跟叶子节点置换,即,取被删除节点的左子树的最大值或者右子树的最小值与被删除节点交换,然后删除被交换后的叶子节点。优选的,数据库服务器在执行节点查询时,是对平衡二叉树的节点进行查询,包括首选将要查询的数据与根节点进行大小比较,若查询数据小,则将目标转为根节点的左子节点,否则转为右子节点;然后再次进行比较,直到找到相等的节点或者子节点为空;子节点为空表示查询失败。本专利技术的有益效果:本专利技术所述的一种平衡二叉树的非递归高性能构建方法,解决了采用非递归方法实现了AVL树的增加、删除和查询的操作的技术问题,本专利技术对于项目中需要用到AVL树的查询场合,可以以类似于红黑树生成的效率生成AVL树,以比红黑树高10%左右的查询效率进行数据查询,对于极端情况,avl树可比红黑树高出40%以上的查询效率,生成树效率比红黑树算法没有大的优势,可以应用在对生成数据时间稍微不敏感但对查询速度有很高要求的场合,相对于目前普遍的AVL树递归方法可以不受数据规模大小的限制,算法耗时也比递归算法大幅降低。附图说明图1为本专利技术的右旋调整的调整前后节点示意如图;图2是本专利技术的左旋调整的调整前后节点示意如图;图3是本专利技术的先左旋再右旋调整的调整前后节点示意如图;图4是本专利技术的先右旋再左旋调整的调整前后节点示意如图。具体实施方式下面将结合本专利技术实施例中的附图,对本专利技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本专利技术一部分实施例,而不是全部的实施例。基于本专利技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本专利技术保护的范围。如图1-4所示,一种平衡二叉树的非递归高性能构建方法,建立数据库服务器、节点增加服务器、节点删除服务器和平衡二叉树构建服务器,在数据库服务器中建立HASH表的NOSQL数据库并提供节点查询功能;节点增加服务器用于接收新插入的数据,并在新数据插入的时候判断新插入的数据的节点链表的总数据量:若总数据量到达预设新增限值,则通知平衡二叉树构建服务器进行平衡二叉树的构建;反之则在原有的平衡二叉树上增加节点;节点删除服务器用于在删除数据的时候,判断若节点数据结构为平衡二叉树,则删除完毕判断树的总节点数,若总节点数小于预设删除限值,则重新将平衡二叉树转化为链表;平衡二叉树构建服务器用于在接收到节点增加服务器的通知后,进行构建平衡本文档来自技高网...

【技术保护点】
1.一种平衡二叉树的非递归高性能构建方法,其特征在于:建立数据库服务器、节点增加服务器、节点删除服务器和平衡二叉树构建服务器,在数据库服务器中建立HASH表的NOSQL数据库并提供节点查询功能;/n节点增加服务器用于接收新插入的数据,并在新数据插入的时候判断新插入的数据的节点链表的总数据量:若总数据量到达预设新增限值,则通知平衡二叉树构建服务器进行平衡二叉树的构建;反之则在原有的平衡二叉树上增加节点;/n节点删除服务器用于在删除数据的时候,判断若节点数据结构为平衡二叉树,则删除完毕判断树的总节点数,若总节点数小于预设删除限值,则重新将平衡二叉树转化为链表;/n平衡二叉树构建服务器用于在接收到节点增加服务器的通知后,进行构建平衡二叉树,并通知数据库服务器根据构建的平衡二叉树进行数据存储;/n平衡二叉树构建服务器根据平衡因子的计算与失衡节点的翻转调整方法构建平衡二叉树,具体包括:/n对于平衡因子的定义为右子树高减去左子树高;对于平衡二叉树来说,平衡因子的取值范围为-1、0和1;/n初始节点为0,若增加左子树节点,则平衡因子为-1,若增加右子树节点,则平衡因子为1;/n若平衡因子变化为-2或者2,则触发平衡旋转;/n对于AVL树的失衡调整包括右旋调整、左旋调整、先左旋再右旋调整和先右旋再左旋调整;/n设定平衡因子的表示方法以bf_nodename为准,xnode的平衡因子名称即为bf_xnode,ynode的平衡因子名称即为bf_ynode,znode的平衡因子名称即为bf_znode;/n右旋调整的计算方法如下:/nbf_znode=bf_znode–(bf_ynode–1);/nbf_ynode=bf_ynode+1;/n左旋调整的计算方法如下:/nbf_znode=bf_znode–(bf_yndoe+1);/nbf_ynode=bf_ynode–1;/n先左旋再右旋调整的计算方法如下:/nbf_ynode=-(bf_xnode×bf_xnode+bf_xnode)÷2;/nbf_znode=(bf_xnode×bf_xnode–bf_xnode)÷2;/nbf_xnode=0;/n先右旋再左旋调整的计算方法如下:/nbf_ynode=(bf_xnode×bf_xnode-bf_xnode)÷2;/nbf_znode=-(bf_xnode×bf_xnode+bf_xnode)÷2;/nbf_xnode=0。/n...

【技术特征摘要】
1.一种平衡二叉树的非递归高性能构建方法,其特征在于:建立数据库服务器、节点增加服务器、节点删除服务器和平衡二叉树构建服务器,在数据库服务器中建立HASH表的NOSQL数据库并提供节点查询功能;
节点增加服务器用于接收新插入的数据,并在新数据插入的时候判断新插入的数据的节点链表的总数据量:若总数据量到达预设新增限值,则通知平衡二叉树构建服务器进行平衡二叉树的构建;反之则在原有的平衡二叉树上增加节点;
节点删除服务器用于在删除数据的时候,判断若节点数据结构为平衡二叉树,则删除完毕判断树的总节点数,若总节点数小于预设删除限值,则重新将平衡二叉树转化为链表;
平衡二叉树构建服务器用于在接收到节点增加服务器的通知后,进行构建平衡二叉树,并通知数据库服务器根据构建的平衡二叉树进行数据存储;
平衡二叉树构建服务器根据平衡因子的计算与失衡节点的翻转调整方法构建平衡二叉树,具体包括:
对于平衡因子的定义为右子树高减去左子树高;对于平衡二叉树来说,平衡因子的取值范围为-1、0和1;
初始节点为0,若增加左子树节点,则平衡因子为-1,若增加右子树节点,则平衡因子为1;
若平衡因子变化为-2或者2,则触发平衡旋转;
对于AVL树的失衡调整包括右旋调整、左旋调整、先左旋再右旋调整和先右旋再左旋调整;
设定平衡因子的表示方法以bf_nodename为准,xnode的平衡因子名称即为bf_xnode,ynode的平衡因子名称即为bf_ynode,znode的平衡因子名称即为bf_znode;
右旋调整的计算方法如下:
bf_znode=bf_znode–(bf_ynode–1);
bf_ynode=bf_ynode+1;
左旋调整的计算方法如下:
bf_znode=bf_znode–(bf_yndoe+1);<...

【专利技术属性】
技术研发人员:王凤雷王锋平林世颖时春
申请(专利权)人:江苏未来智慧信息科技有限公司
类型:发明
国别省市:江苏;32

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1