掌桥专利:专业的专利平台
掌桥专利
首页

一种基于红黑树的数据插入方法、装置及电子设备

文献发布时间:2023-06-19 10:24:22


一种基于红黑树的数据插入方法、装置及电子设备

技术领域

本发明涉及数据存储技术领域,尤其涉及一种基于红黑树的数据插入方法、装置及电子设备。

背景技术

红黑树是一种数据结构,也是一种自平衡二叉查找树,能够以O(logn)的时间复杂度对数据进行插入和删除操作,而且它的插入和删除操作最多只需要两次或者三次旋转即可保持树的平衡。

目前,为了保证对内存中的数据节点的高效查询和高效更新,通常可以采用红黑树的数据结构在内存中缓存数据节点,这样,当需要插入数据时,则可以申请内存,并在申请的内存中创建数据节点,具体地,如图1所示,当需要插入数据时,包括以下步骤:步骤1,判断红黑树的根节点是否为空;当根节点为空时,则执行步骤2:插入该数据,并将该数据所在位置设置为根节点;或者,当根节点为非空时则执行步骤3:将该节点设置为当前节点,并判断当前节点的子节点是否为空;步骤4,若当前节点的子节点为空时,则返回当前节点的父节点,以确定子节点的位置,进而将数据插入子节点;或者若当前节点的子节点为非空时,则执行步骤5比较待插入的数据和当前节点的值;若值相等,则执行步骤6更新当前节点的值,并设置节点为红色;若待插入数据小于当前节点,则执行步骤7继续向左子树查询,循环执行上述步骤3;若待插入数据大于当前节点,则执行步骤8继续向右子树查询,循环执行上述步骤3。

采用上述方式时,由于每次将数据插入空节点之前,均要先返回该节点的父节点,以便通过父节点确定该空节点的位置,而父节点在在系统中需要占用一定字节,这样,在待插入数据量较大的情况下,将会占用大量的内存空间。

发明内容

本发明实施例提供一种基于红黑树的数据插入方法,用以解决现有技术中由于每次将数据插入空节点之前,均要先返回该节点的父节点,导致内存资源消耗较多的问题。

本发明实施例还提供一种基于红黑树的数据插入装置,一种电子设备,以及一种计算机可读存储介质。

本发明实施例采用下述技术方案:

第一方面,本发明实施例提供一种基于红黑树的数据插入方法,包括:

确定待插入的目标数组,目标数组中包括至少两个待插入的目标数据;

循环执行指定操作,直至n=N时终止循环执行指定操作,得到插入目标数组后的红黑树;

指定操作包括:

按照目标数组中由小到大的顺序,依次从目标数组中获取序号为n的目标数据;其中,n表示目标数组中第n个目标数据的序号,n的取值范围为[1,2,…N],N表示目标数组中的最后一个目标数据的序号;

根据序号为n的目标数据在预设的红黑树中进行查找,以判断红黑树中是否存在与序号为n的目标数据相同的数据;其中,预设的红黑树为二叉排序树;

当红黑树中不存在与序号为n的目标数据相同的数据时,则基于序号为n的目标数据确定序号为n的目标数据的待插入位置,并将序号为n的目标数据插入待插入位置;

从目标数组中获取序号为n+1的目标数据,并根据序号为n的目标数据在预设的红黑树中进行查找,以判断红黑树中是否存在与序号为n+1的目标数据相同的数据;

当红黑树中不存在与序号为n+1的目标数据相同的数据时,则基于序号为n+1的目标数据确定序号为n+1的目标数据的待插入位置,并将序号为n+1的目标数据插入待插入位置;

对插入目标数组后的红黑树进行平衡调整,以满足标准红黑树的数据结构。

可选的,当红黑树中不存在与序号为n的目标数据相同的数据时,则基于序号为n的目标数据确定序号为n的目标数据的待插入位置,并将序号为n的目标数据插入待插入位置,包括:

当红黑树中不存在与序号为n的目标数据相同的数据时,则判断红黑树的根节点的位置是否为空;

若根节点的位置为空,则将序号为n的目标数据插入根节点的位置;

若根节点的位置为非空,则基于序号为n的目标数据的数值以及当前节点的数值确定序号为n的目标数据的待插入位置,并将序号为n的目标数据插入待插入位置;其中,当前节点为查找过程中最后查找的节点。

可选的,若根节点的位置为非空,则基于序号为n的目标数据的数值以及当前节点的数值确定序号为n的目标数据的待插入位置,并将序号为n的目标数据插入待插入位置,包括:

比较序号为n的目标数据的数值以及当前节点的数值的大小;

若序号为n的目标数据的数值小于当前节点的数值,则将序号为n的目标数据插入当前节点的左子树;

若序号为n的目标数据的数值大于当前节点的数值,则将序号为n的目标数据插入当前节点的右子树。

可选的,若根节点的位置为空,则将序号为n的目标数据插入根节点的位置,包括:

申请新节点,并将序号为n的目标数据的数值赋值给新节点;

若根节点的位置为空,则将赋值后的新节点确定为根节点插入红黑树。

可选的,若红黑树中存在与序号为n的目标数据相同的数据时,方法还包括:

返回提示信息,提示信息用于提示红黑树中存在与序号为n的目标数据相同的数据。

第二方面,本发明实施例提供一种基于红黑树的数据插入方法,包括:

数组确定模块,用于确定待插入的目标数组,目标数组中包括至少两个待插入的目标数据;

循环操作模块,用于循环执行指定操作,直至n=N时终止循环执行指定操作,得到插入目标数组后的红黑树;

指定操作包括:

按照目标数组中由小到大的顺序,依次从目标数组中获取序号为n的目标数据;其中,n表示目标数组中第n个目标数据的序号,n的取值范围为[1,2,…N],N表示目标数组中的最后一个目标数据的序号;

根据序号为n的目标数据在预设的红黑树中进行查找,以判断红黑树中是否存在与序号为n的目标数据相同的数据;其中,预设的红黑树为二叉排序树;

当红黑树中不存在与序号为n的目标数据相同的数据时,则基于序号为n的目标数据确定序号为n的目标数据的待插入位置,并将序号为n的目标数据插入待插入位置;

从目标数组中获取序号为n+1的目标数据,并根据序号为n的目标数据在预设的红黑树中进行查找,以判断红黑树中是否存在与序号为n+1的目标数据相同的数据;

当红黑树中不存在与序号为n+1的目标数据相同的数据时,则基于序号为n+1的目标数据确定序号为n+1的目标数据的待插入位置,并将序号为n+1的目标数据插入待插入位置;

插入模块,用于对插入目标数组后的红黑树进行平衡调整,以满足标准红黑树的数据结构。

可选的,循环操作模块,包括:

判断单元,用于当红黑树中不存在与序号为n的目标数据相同的数据时,则判断红黑树的根节点的位置是否为空;

插入单元,用于若根节点的位置为空,则将序号为n的目标数据插入根节点的位置;

确定单元,用于若根节点的位置为非空,则基于序号为n的目标数据的数值以及当前节点的数值确定序号为n的目标数据的待插入位置,并将序号为n的目标数据插入待插入位置;其中,当前节点为查找过程中最后查找的节点。

可选的,确定单元,包括:

比较子单元,用于比较序号为n的目标数据的数值以及当前节点的数值的大小;

第一插入子单元,用于若序号为n的目标数据的数值小于当前节点的数值,则将序号为n的目标数据插入当前节点的左子树;

第二插入子单元,用于若序号为n的目标数据的数值大于当前节点的数值,则将序号为n的目标数据插入当前节点的右子树。

可选的,插入单元,用于:

申请新节点,并将序号为n的目标数据的数值赋值给新节点;

若根节点的位置为空,则将赋值后的新节点确定为根节点插入红黑树。

可选的,装置还包括:

提示模块,用于若红黑树中存在与序号为n的目标数据相同的数据时,返回提示信息,提示信息用于提示红黑树中存在与序号为n的目标数据相同的数据。

第三方面,本发明实施例提供一种电子设备,包括:存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,计算机程序被处理器执行时实现如上的基于红黑树的数据插入方法的步骤。

第四方面,本发明实施例提供一种计算机可读存储介质,其特征在于,计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时实现如上的基于红黑树的数据插入方法的步骤。

本发明实施例采用的上述至少一个技术方案能够达到以下有益效果:

采用本发明实施例提供的方法,由于预设的红黑树为二叉排序树,因此,可以先插入数据,并在数据完全插完后再对红黑树调整,这样,在插入数据时,可以仅根据待插入数据的数值确定待插入的位置,并不需要返回父节点,以及根据返回父节点确定待插入的位置,从而可以节省现有技术中父节点所占用的内存,降低内存资源的消耗。

附图说明

此处所说明的附图用来提供对本发明的进一步理解,构成本发明的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:

图1为相关技术提供的一种基于红黑树的数据插入方法的实现流程示意图;

图2a为本发明实施例提供的一种基于红黑树的数据插入方法的实现流程示意图;

图2b为本发明实施例提供的一种当前节点的示意图;

图3a为本发明实施例提供的一种插入所有待插入的目标数据后的红黑树的示意图;

图3b为本发明实施例提供的一种进行平衡调整后的红黑树的示意图;

图4为本发明实施例提供一种基于红黑树的数据插入装置的具体结构示意图;

图5为本发明实施例提供的一种电子设备的结构示意图。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明具体实施例及相应的附图对本发明技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

以下结合附图,详细说明本发明各实施例提供的技术方案。

实施例1

为解决现有技术中由于每次将数据插入空节点之前,均要先返回该节点的父节点,导致内存资源消耗较多的问题,本发明实施例提供一种基于红黑树的数据插入方法。

该方法的执行主体,可以是各种类型的计算设备,或者,可以是安装于计算设备上的应用程序或应用(Application,APP)。所述的计算设备,比如可以是手机、平板电脑、智能可穿戴设备等用户终端,也可以是服务器等。

为便于描述,本发明实施例以该方法的执行主体为服务器为例,对该方法进行介绍。本领域技术人员可以理解,本发明实施例以该服务器为例对方法进行介绍,仅是一种示例性说明,并不对本方案对应的权利要求保护范围构成限制。

具体地,本发明实施例提供的该方法的实现流程如图2a所示,包括如下步骤:

步骤21,服务器确定待插入的目标数组,目标数组中包括至少两个待插入的目标数据。

待插入的目标数组,可以理解为用于存储待插入的目标数据的数组,该目标数组中可以包括至少两个待插入的目标数据。

目标数据,可以包括待存储至预设的红黑树中的数据。其中,预设的红黑树是一种数据结构,具体地是指一种二叉排序树,用于存储目标数据。

例如,假设需要将数组A中的全部数据存储至预设的红黑树,且数组A中包括{6,13,54,63},则可以认为待插入的目标数组为数组A,待插入的目标数据包括6,13,54,63。

需要说明的是,上述例举的目标数据仅是本发明实施例提供的一种示例性说明,并不对本发明实施例造成任何限定。

在一种可选的实施方式中,待插入的目标数据还可以包括图片、文字等信息的扩展属性值,其中,所述图片的扩展属性值可以根据图片的拍摄时间、图片的内容及一切用户添加到图片中的信息确定;所述文字的扩展属性值可以根据文字的编辑时间,以及文字的内容等信息确定。对应的,待插入的目标数组可以包括至少两张图片或至少两个文字的扩展属性值。

本发明实施例中,当服务器接收到用户基于前端界面上传的数据时,则可以基于用户上传的数据,确定待插入的目标数组。或者,当服务器接收到用户基于前端界面发送的数据插入请求时,则可以基于用户发送的数据插入请求,确定待插入的目标数组。

例如,以目标数组包括待存储至预设的红黑树中的目标数据为例,则当服务器接收到用户上传的数据时,则可以基于用户发送的数据确定待插入的目标数组。

或者,以目标数组包括图片的扩展属性值为例,当服务器监测到用户在客户端上传图片集以存入服务器时,则可以根据上传的图片集中每张图片的扩展属性确定每张图片的扩展属性值;然后,根据每张图片的扩展属性值的集合确定待插入的目标数组。

确定待插入的目标数组后,则可以执行以下步骤22,将该目标数组中的全部数据均插入至预设的红黑树,得到插入目标数组后的红黑树。

步骤22,循环执行指定操作,直至n+1=N时终止循环执行指定操作,得到插入目标数组后的红黑树。

指定操作包括:

步骤一:按照目标数组中由小到大的顺序,依次从目标数组中获取序号为n的目标数据;其中,n表示目标数组中第n个目标数据的序号,n的取值范围为[1,2,…N],N表示目标数组中的最后一个目标数据的序号;

步骤二:根据序号为n的目标数据在预设的红黑树中进行查找,以判断红黑树中是否存在与序号为n的目标数据相同的数据;其中,预设的红黑树为二叉排序树;

步骤三:当红黑树中不存在与序号为n的目标数据相同的数据时,则基于序号为n的目标数据确定序号为n的目标数据的待插入位置,并将序号为n的目标数据插入待插入位置;

步骤四:从目标数组中获取序号为n+1的目标数据,并根据序号为n的目标数据在预设的红黑树中进行查找,以判断红黑树中是否存在与序号为n+1的目标数据相同的数据;

步骤五:当红黑树中不存在与序号为n+1的目标数据相同的数据时,则基于序号为n+1的目标数据确定序号为n+1的目标数据的待插入位置,并将序号为n+1的目标数据插入待插入位置。

例如,沿用上例,假设目标数组中待插入的目标数据从上往下(也即序号从小到大)分别为6,13,54,63,则可以按照目标数组中序号由小到大的顺序,先从目标数组中获取序号为1的目标数据6;然后,根据目标数据6在预设的红黑树中进行查找,以判断红黑树中是否存在与6相同的数据;当红黑树中不存在与6相同的数据时,则确定6的待插入位置,并将6插入待插入位置。

将6插入待插入位置后,继续从目标数组中获取序号为2的目标数据13;然后,根据目标数据13在预设的红黑树中进行查找,以判断红黑树中是否存在与13相同的数据;当红黑树中不存在与13相同的数据时,则确定13的待插入位置,并将13插入待插入位置。以此类推,直至将目标数组中的最后一个待插入的目标数据63插入待插入位置,得到插入目标数组后的红黑树。

其中,在步骤二中根据目标数据在预设的红黑树中进行查找时,可以根据目标数据从预设的红黑树的根节点开始,按照从上往下、从左往右的顺序依次进行查找,以判断红黑树中是否存在与目标数据相同的数据。其中,根节点是预设的红黑树的一个组成部分,也叫树根。所有非空的二叉排序树中,有且仅有一个根结点,它是同一棵红黑树中除本身外所有结点的祖先,没有父结点。

例如,假设待插入的目标数据为17,则可以从预设的红黑树的根节点开始,按照从上往下、从左往右的顺序依次进行查找,以判断红黑树中是否存在17。

可选的,若根据目标数据在预设的红黑树中进行查找之后,确定该红黑树中存在与目标数据相同的数据时,可以向用户发送该红黑树中存在与目标数据相同的数据的提示消息,以便用户确认是否继续对该目标数据进行插入。例如,用户可以为了减少内存资源的消耗,选择不再继续对该目标数据进行插入,此时则可以结束当前目标数据的插入操作。或者,用户也可以选择继续对该目标数据进行插入操作,这样,服务器则可以基于该目标数据对预设的红黑树中的数据进行更新。

若根据目标数据在预设的红黑树中进行查找之后,确定该红黑树中不存在与目标数据相同的数据时,则可以根据目标数据确定目标数据的待插入位置,并将目标数据插入该待插入位置。

实际应用中,考虑到当预设的红黑树中存储的数据为空时,或者预设的红黑树中存储的数据为非空但不存在目标数据时,均会出现红黑树中不存在与目标数据相同的数据的情况,而当预设的红黑树中存储的数据为空时,可以直接在预设的红黑树的根节点位置存储目标数据,不需要进行进一步确定目标数据的待插入位置,可以提高数据插入速率,因此,本发明实施例中,在确定该红黑树中不存在与目标数据相同的数据之后,可以继续判断预设的红黑树的根节点是否为空。

若根节点的位置为空,则将序号为n的目标数据插入根节点的位置。

可选的,若根节点的位置为空,则将序号为n的目标数据插入根节点的位置,可以包括如下步骤:

首先,申请新节点,并将序号为n的目标数据的数值赋值给新节点;

其次,若根节点的位置为空,则将赋值后的新节点确定为根节点插入红黑树。

或者,若确定预设的红黑树的根节点的位置为非空,则可以基于序号为n的目标数据的数值以及当前节点的数值确定序号为n的目标数据的待插入位置,并将序号为n的目标数据插入待插入位置;其中,当前节点为查找过程中最后查找的节点。

需要说明的是,由于在红黑树中进行查找时通常是从红黑树的根节点开始,按照从上往下从左往右查找,因此,当预设的红黑树的根节点的位置为非空时,当前节点可以指从红黑树的根节点开始,按照从上往下从左往右的查找顺序,最后查找的节点,也即红黑树中最底层子节点中从左往右起最右端的节点。

例如,如图2b所示,假设目前存在一颗红黑树,该红黑树包括三层树结构,从上往下数第一层数结构为该红黑树的根节点,根节点为50;第二层树结构为根节点的第一子节点,其中,根节点左边的第一子节点是30,根节点右边的第一子节点是70;第三层树结构为第一子节点的子节点(为方便描述,以下称为第二子节点),30左边的第二子节点是10,30右边的第二子节点是40,70左边的第二子节点为空,70右边的第二子节点是90,则90所在位置的节点可以称为当前节点。

在一种可选的实施方式中,若确定预设的红黑树的根节点的位置为非空,根据目标数据确定目标数据的待插入位置时,可以采用如下步骤:

比较序号为n的目标数据的数值以及当前节点的数值的大小;

若序号为n的目标数据的数值小于当前节点的数值,则将序号为n的目标数据插入当前节点的左子树;

若序号为n的目标数据的数值大于当前节点的数值,则将序号为n的目标数据插入当前节点的右子树。

例如,沿用图2b所示的实例,假设当前节点的目标数据为90,序号为n的目标数据的数值为8,则可以比较序号为n的目标数据的数值(8)以及当前节点的数值(90)的大小。该实例中,由于序号为n的目标数据的数值(8)小于当前节点的数值(90),因此,可以将序号为n的目标数据的数值(8)插入当前节点的左子树。

通常,基于红黑树进行数据插入时,需要保证插入数据后的红黑树满足标准红黑树的性质,以维持红黑树的稳定,因此,本发明实施中,在将目标数组中的所有目标数据均插入预设的红黑树之后,还可以执行以下步骤23对插入目标数组后的红黑树进行平衡调整,以满足标准红黑树的数据结构。

步骤23,对插入目标数组后的红黑树进行平衡调整,以满足标准红黑树的数据结构。

通常,标准的红黑树可以满足以下条件:

(1)每一个节点不是黑色就是红色;

(2)根节点总是黑色;

(3)如果某节点是红色,则该节点的子节点必须是黑色;

(4)从根节点到叶节点的每条路径,包含的黑色节点数目必须相同。

基于此,本发明实施例中,对插入目标数组后的红黑树进行平衡调整的操作可以包括使得插入目标数组后的红黑树满足上述条件的所有操作,例如,对该红黑树中的节点进行重新着色、旋转等。

采用本发明实施例提供的方法,由于预设的红黑树为二叉排序树,因此,可以先插入数据,并在数据完全插完后再对红黑树调整,这样,在插入数据时,可以仅根据待插入数据的数值确定待插入的位置,并不需要返回父节点,以及根据返回父节点确定待插入的位置,从而可以节省现有技术中父节点所占用的内存,降低内存资源的消耗。

实施例2

以下结合实际场景,说明本发明实施例提供的方法在实际中如何应用。

为了方便描述,以下在介绍方法之前先对本发明实施例涉及的场景进行简单说明。

通常,由于物联网使用场景以及物联网设备的特殊性,因此,行业内对于物联网设备运行过程当中,程序所占用的内存,具有特别高的要求。具体地,一方面由于物联网设备长期运行,而核心的运行逻辑都存放于内存当中,对内存读写非常频繁,对整个系统的稳定性产生考验,因此,需要减少对内存资源的消耗,以期待延长物联网设备的寿命并且提高稳定性;另一方面,受制于成本和物联网设备所处的使用环境,大部分物联网设备不应该具备太大的内存,因此需要一种极度优化的算法对物联网设备/系统/程序进行改造,以实现尽可能少的内存占用。

基于此,为了解决上述技术问题,可以将本发明实施例中提供的方法应用于物联网使用场景中,当需要在物联网设备的内存中插入数据时,则采用本发明实施例提供的基于红黑树的数据插入方法以插入数据。

例如,假设需要在物联网设备的内存中插入10,85,15,70,则可以先确定待插入的目标数组中的目标数据分别为10,85,15,70,且各目标数据对应的序号分别为1,2,3,4。

其次,从该目标数组中获取序号为1的目标数据10,并根据序号为1的目标数据(10)在预设的红黑树中进行查找,以判断红黑树中是否存在与序号为1的目标数据(10)相同的数据。

本发明实施例中,假设预设的红黑树中存储的数据为空,则当确定红黑树中不存在与序号为1的目标数据(10)相同的数据时,可以将序号为1的目标数据(10)插入该红黑树的根节点;然后,从该目标数组中获取序号为2的目标数据(85),并根据序号为2的目标数据(85)在预设的红黑树中进行查找,以判断红黑树中是否存在与序号为2的目标数据(85)相同的数据。由于该实例中,目前红黑树仅在根节点处存在目标数据(10),因此红黑树中不存在与序号为2的目标数据(85)相同的数据。

此时,需要基于序号为2的目标数据(85)确定目标数据(85)的插入位置。具体地,由于目标数据(85)大于目标数据(10),因此,可以将目标数据(85)插入至目标数据(10)的右子树。

接下来,从目标数组中获取序号为3的目标数据(15),并根据序号为3的目标数据(15)在预设的红黑树中进行查找,以判断红黑树中是否存在与序号为3的目标数据(15)相同的数据。

本发明实施例中,由于目前该红黑树中仅包括目标数据(85)和目标数据(10),因此,可以确定红黑树中不存在与序号为3的目标数据(15)相同的数据。

此时,需要基于序号为3的目标数据(15)确定目标数据(15)的插入位置。具体地,由于目标数据(15)小于目标数据(85),因此,可以将目标数据(15)插入至目标数据(85)的左子树。

以此类推,继续将目标数据(70)插入目标数据(15)的右子树,至此,目标数组中的所有待插入的目标数据均插入在物联网设备的内存中。其中,如图3a所示,为本发明实施例中插入所有待插入的目标数据的红黑树。

最后,需要对插入目标数组的红黑树进行平衡调整,以使该红黑树满足标准红黑树的性质。

如图3b所示,为本发明实施例中对插入目标数组的红黑树进行平衡调整之后的红黑树。相对于图3a而言,进行平衡调整之后的红黑树中,目标数据10、15、70的位置发生了旋转,而且对每个目标数据所在的节点进行了着色,比如,将目标数据10、15以及85所在的节点着色为黑色,将目标数据70所在的节点着色为红色。

采用本发明实施例提供的方法,由于预设的红黑树为二叉排序树,因此,可以先插入数据,并在数据完全插完后再对红黑树调整,这样,在插入数据时,可以仅根据待插入数据的数值确定待插入的位置,并不需要返回父节点,以及根据返回父节点确定待插入的位置,从而可以节省现有技术中父节点所占用的内存,降低内存资源的消耗。

实施例3

出于与上述实施例1相同的发明构思,本发明实施例还提供一种用于实施上述方法的装置,以解决现有技术中由于每次将数据插入空节点之前,均要先返回该节点的父节点,导致内存资源消耗较多的问题。

以下对本发明实施例提供的装置进行详细介绍。

请参见图4,为本申请实施例提供的一种基于红黑树的数据插入装置的具体结构示意图,包括数组确定模块41、循环操作模块42和插入模块43。各模块的功能如下:

数组确定模块41,用于确定待插入的目标数组,目标数组中包括至少两个待插入的目标数据;

循环操作模块42,用于循环执行指定操作,直至n=N时终止循环执行指定操作,得到插入目标数组后的红黑树;

指定操作包括:

按照目标数组中由小到大的顺序,依次从目标数组中获取序号为n的目标数据;其中,n表示目标数组中第n个目标数据的序号,n的取值范围为[1,2,…N],N表示目标数组中的最后一个目标数据的序号;

根据序号为n的目标数据在预设的红黑树中进行查找,以判断红黑树中是否存在与序号为n的目标数据相同的数据;其中,预设的红黑树为二叉排序树;

当红黑树中不存在与序号为n的目标数据相同的数据时,则基于序号为n的目标数据确定序号为n的目标数据的待插入位置,并将序号为n的目标数据插入待插入位置;

从目标数组中获取序号为n+1的目标数据,并根据序号为n的目标数据在预设的红黑树中进行查找,以判断红黑树中是否存在与序号为n+1的目标数据相同的数据;

当红黑树中不存在与序号为n+1的目标数据相同的数据时,则基于序号为n+1的目标数据确定序号为n+1的目标数据的待插入位置,并将序号为n+1的目标数据插入待插入位置。

插入模块43,用于对插入目标数组后的红黑树进行平衡调整,以满足标准红黑树的数据结构。

可选的,循环操作模块,包括:

判断单元,用于当红黑树中不存在与序号为n的目标数据相同的数据时,则判断红黑树的根节点的位置是否为空;

插入单元,用于若根节点的位置为空,则将序号为n的目标数据插入根节点的位置;

确定单元,用于若根节点的位置为非空,则基于序号为n的目标数据的数值以及当前节点的数值确定序号为n的目标数据的待插入位置,并将序号为n的目标数据插入待插入位置;其中,当前节点为查找过程中最后查找的节点。

可选的,确定单元,包括:

比较子单元,用于比较序号为n的目标数据的数值以及当前节点的数值的大小;

第一插入子单元,用于若序号为n的目标数据的数值小于当前节点的数值,则将序号为n的目标数据插入当前节点的左子树;

第二插入子单元,用于若序号为n的目标数据的数值大于当前节点的数值,则将序号为n的目标数据插入当前节点的右子树。

可选的,插入单元,用于:

申请新节点,并将序号为n的目标数据的数值赋值给新节点;

若根节点的位置为空,则将赋值后的新节点确定为根节点插入红黑树。

可选的,装置还包括:

提示模块,用于若红黑树中存在与序号为n的目标数据相同的数据时,返回提示信息,提示信息用于提示红黑树中存在与序号为n的目标数据相同的数据。

采用本发明实施例提供的装置,由于预设的红黑树为二叉排序树,因此,可以先插入数据,并在数据完全插完后再对红黑树调整,这样,在插入数据时,可以仅根据待插入数据的数值确定待插入的位置,并不需要返回父节点,以及根据返回父节点确定待插入的位置,从而可以节省现有技术中父节点所占用的内存,降低内存资源的消耗。

实施例4

图5为实现本发明各个实施例的一种电子设备的硬件结构示意图,该电子设备300包括但不限于:射频单元501、网络模块502、音频输出单元503、输入单元504、传感器505、显示单元506、用户输入单元507、接口单元508、存储器509、处理器510、以及电源511等部件。本领域技术人员可以理解,图5中示出的电子设备结构并不构成对电子设备的限定,电子设备可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。在本发明实施例中,电子设备包括但不限于手机、平板电脑、笔记本电脑、掌上电脑、车载终端、可穿戴设备、以及计步器等。

其中,处理器510,用于确定待插入的目标数组,目标数组中包括至少两个待插入的目标数据;循环执行指定操作,直至n=N时终止循环执行指定操作,得到插入目标数组后的红黑树;指定操作包括:按照目标数组中由小到大的顺序,依次从目标数组中获取序号为n的目标数据;其中,n表示目标数组中第n个目标数据的序号,n的取值范围为[1,2,…N],N表示目标数组中的最后一个目标数据的序号;根据序号为n的目标数据在预设的红黑树中进行查找,以判断红黑树中是否存在与序号为n的目标数据相同的数据;其中,预设的红黑树为二叉排序树;当红黑树中不存在与序号为n的目标数据相同的数据时,则基于序号为n的目标数据确定序号为n的目标数据的待插入位置,并将序号为n的目标数据插入待插入位置;从目标数组中获取序号为n+1的目标数据,并根据序号为n的目标数据在预设的红黑树中进行查找,以判断红黑树中是否存在与序号为n+1的目标数据相同的数据;当红黑树中不存在与序号为n+1的目标数据相同的数据时,则基于序号为n+1的目标数据确定序号为n+1的目标数据的待插入位置,并将序号为n+1的目标数据插入待插入位置;对插入目标数组后的红黑树进行平衡调整,以满足标准红黑树的数据结构。

可选的,当红黑树中不存在与序号为n的目标数据相同的数据时,则基于序号为n的目标数据确定序号为n的目标数据的待插入位置,并将序号为n的目标数据插入待插入位置,包括:

当红黑树中不存在与序号为n的目标数据相同的数据时,则判断红黑树的根节点的位置是否为空;

若根节点的位置为空,则将序号为n的目标数据插入根节点的位置;

若根节点的位置为非空,则基于序号为n的目标数据的数值以及当前节点的数值确定序号为n的目标数据的待插入位置,并将序号为n的目标数据插入待插入位置;其中,当前节点为查找过程中最后查找的节点。

可选的,若根节点的位置为非空,则基于序号为n的目标数据的数值以及当前节点的数值确定序号为n的目标数据的待插入位置,并将序号为n的目标数据插入待插入位置,包括:

比较序号为n的目标数据的数值以及当前节点的数值的大小;

若序号为n的目标数据的数值小于当前节点的数值,则将序号为n的目标数据插入当前节点的左子树;

若序号为n的目标数据的数值大于当前节点的数值,则将序号为n的目标数据插入当前节点的右子树。

可选的,若根节点的位置为空,则将序号为n的目标数据插入根节点的位置,包括:

申请新节点,并将序号为n的目标数据的数值赋值给新节点;

若根节点的位置为空,则将赋值后的新节点确定为根节点插入红黑树。

可选的,若红黑树中存在与序号为n的目标数据相同的数据时,方法还包括:

返回提示信息,提示信息用于提示红黑树中存在与序号为n的目标数据相同的数据。

存储器509,用于存储可在处理器510上运行的计算机程序,该计算机程序被处理器510执行时,实现处理器510所实现的上述功能。

应理解的是,本发明实施例中,射频单元501可用于收发信息或通话过程中,信号的接收和发送,具体的,将来自基站的下行数据接收后,给处理器510处理;另外,将上行的数据发送给基站。通常,射频单元501包括但不限于天线、至少一个放大器、收发信机、耦合器、低噪声放大器、双工器等。此外,射频单元501还可以通过无线通信系统与网络和其他设备通信。

电子设备通过网络模块502为用户提供了无线的宽带互联网访问,如帮助用户收发电子邮件、浏览网页和访问流式媒体等。

音频输出单元503可以将射频单元501或网络模块502接收的或者在存储器509中存储的音频数据转换成音频信号并且输出为声音。而且,音频输出单元503还可以提供与电子设备500执行的特定功能相关的音频输出(例如,呼叫信号接收声音、消息接收声音等等)。音频输出单元503包括扬声器、蜂鸣器以及受话器等。

输入单元504用于接收音频或视频信号。输入单元504可以包括图形处理器(Graphics Processing Unit,GPU)5041和麦克风5042,图形处理器5041对在视频捕获模式或图像捕获模式中由图像捕获装置(如摄像头)获得的静态图片或视频的图像数据进行处理。处理后的图像帧可以显示在显示单元406上。经图形处理器5041处理后的图像帧可以存储在存储器509(或其它存储介质)中或者经由射频单元501或网络模块502进行发送。麦克风5042可以接收声音,并且能够将这样的声音处理为音频数据。处理后的音频数据可以在电话通话模式的情况下转换为可经由射频单元501发送到移动通信基站的格式输出。

电子设备500还包括至少一种传感器505,比如光传感器、运动传感器以及其他传感器。具体地,光传感器包括环境光传感器及接近传感器,其中,环境光传感器可根据环境光线的明暗来调节显示面板5061的亮度,接近传感器可在电子设备500移动到耳边时,关闭显示面板5061和/或背光。作为运动传感器的一种,加速计传感器可检测各个方向上(一般为三轴)加速度的大小,静止时可检测出重力的大小及方向,可用于识别电子设备姿态(比如横竖屏切换、相关游戏、磁力计姿态校准)、振动识别相关功能(比如计步器、敲击)等;传感器505还可以包括指纹传感器、压力传感器、虹膜传感器、分子传感器、陀螺仪、气压计、湿度计、温度计、红外线传感器等,在此不再赘述。

显示单元506用于显示由用户输入的信息或提供给用户的信息。显示单元506可包括显示面板5061,可以采用液晶显示器(Liquid Crystal Display,LCD)、有机发光二极管(Organic Light-Emitting Diode,OLED)等形式来配置显示面板5061。

用户输入单元507可用于接收输入的数字或字符信息,以及产生与电子设备的用户设置以及功能控制有关的键信号输入。具体地,用户输入单元507包括触控面板5071以及其他输入设备5072。触控面板5071,也称为触摸屏,可收集用户在其上或附近的触摸操作(比如用户使用手指、触笔等任何适合的物体或附件在触控面板5071上或在触控面板5071附近的操作)。触控面板5071可包括触摸检测装置和触摸控制器两个部分。其中,触摸检测装置检测用户的触摸方位,并检测触摸操作带来的信号,将信号传送给触摸控制器;触摸控制器从触摸检测装置上接收触摸信息,并将它转换成触点坐标,再送给处理器510,接收处理器510发来的命令并加以执行。此外,可以采用电阻式、电容式、红外线以及表面声波等多种类型实现触控面板5071。除了触控面板5071,用户输入单元507还可以包括其他输入设备5072。具体地,其他输入设备5072可以包括但不限于物理键盘、功能键(比如音量控制按键、开关按键等)、轨迹球、鼠标、操作杆,在此不再赘述。

进一步的,触控面板5071可覆盖在显示面板5061上,当触控面板5071检测到在其上或附近的触摸操作后,传送给处理器510以确定触摸事件的类型,随后处理器510根据触摸事件的类型在显示面板5061上提供相应的视觉输出。虽然在图5中,触控面板5071与显示面板5061是作为两个独立的部件来实现电子设备的输入和输出功能,但是在某些实施例中,可以将触控面板5071与显示面板5061集成而实现电子设备的输入和输出功能,具体此处不做限定。

接口单元508为外部装置与电子设备500连接的接口。例如,外部装置可以包括有线或无线头戴式耳机端口、外部电源(或电池充电器)端口、有线或无线数据端口、存储卡端口、用于连接具有识别模块的装置的端口、音频输入/输出(I/O)端口、视频I/O端口、耳机端口等等。接口单元508可以用于接收来自外部装置的输入(例如,数据信息、电力等等)并且将接收到的输入传输到电子设备500内的一个或多个元件或者可以用于在电子设备500和外部装置之间传输数据。

存储器509可用于存储软件程序以及各种数据。存储器509可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据手机的使用所创建的数据(比如音频数据、电话本等)等。此外,存储器509可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。

处理器510是电子设备的控制中心,利用各种接口和线路连接整个电子设备的各个部分,通过运行或执行存储在存储器509内的软件程序和/或模块,以及调用存储在存储器509内的数据,执行电子设备的各种功能和处理数据,从而对电子设备进行整体监控。处理器510可包括一个或多个处理单元;优选的,处理器510可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器510中。

电子设备500还可以包括给各个部件供电的电源511(比如电池),优选的,电源511可以通过电源管理系统与处理器510逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。

另外,电子设备500包括一些未示出的功能模块,在此不再赘述。

优选的,本发明实施例还提供一种电子设备,包括处理器510,存储器509,存储在存储器509上并可在所述处理器510上运行的计算机程序,该计算机程序被处理器510执行时实现上述基于红黑树的数据插入方法实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。

本发明实施例还提供一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,该计算机程序被处理器执行时实现上述基于红黑树的数据插入方法实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。其中,所述的计算机可读存储介质,如只读存储器(Read-Only Memory,简称ROM)、随机存取存储器(Random AccessMemory,简称RAM)、磁碟或者光盘等。

本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。

本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。

内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。

计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。

还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。

以上所述仅为本发明的实施例而已,并不用于限制本发明。对于本领域技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本发明的权利要求范围之内。

相关技术
  • 一种基于红黑树的数据插入方法、装置及电子设备
  • 一种基于大数据的数据筛选方法、装置及电子设备
技术分类

06120112533293