发明内容
为了解决上述技术问题或者至少部分地解决上述技术问题,本申请提供了一种搭建树形图的数据处理方法及装置。
第一方面,本申请实施例提供了一种搭建树形图的数据处理方法,包括:
确定待处理数据树中的第一父结点对应的第一子结点;
获取所述第一子结点的结点数量;
在所述结点数量大于预设的上限阈值时,根据所述上限阈值及所述结点数量确定将所述第一子结点排列为至少两排的排列信息;
根据所述排列信息生成所述待处理数据树对应的树形图。
可选的,如前述的数据处理方法,所述根据所述上限阈值及所述结点数量确定将所述第一子结点排列为至少两排的排列信息,包括:
根据所述上限阈值确定所述第一子结点排列得到的排数;
确定最后一排中任一所述第一子结点的坐标信息;
根据任一所述第一子结点的坐标信息以及预设的结点间隔信息得到所有所述第一子结点的子结点坐标信息;
根据所述子结点坐标信息得到所述排列信息。
可选的,如前述的数据处理方法,所述根据任一所述第一子结点的坐标信息以及结点间隔信息得到所有所述第一子结点的子结点坐标信息,还包括:
获取所述第一子结点的结点形状信息;
根据任一所述第一子结点的坐标信息、结点间隔信息以及结点形状信息得到所有所述第一子结点的子结点坐标信息。
可选的,如前述的数据处理方法,在得到所述排列信息之后,还包括:
根据所述排列信息以及预设的父结点位置设置策略确定所述第一父结点的坐标。
可选的,如前述的数据处理方法,在确定所述第一父结点的坐标之后,还包括:
确定与所述第一父结点位于同一层次的兄弟结点;
在所述兄弟结点为关联有下一层次中第二子结点的第二父结点时,根据所述第一子结点的坐标确定所述第二子结点的坐标;
根据所述第二子结点的坐标确定所述第二父结点的坐标;
在所述兄弟结点没有关联有下一层次的结点时,根据所述第一子结点的坐标确定所述兄弟结点的坐标。
可选的,如前述的数据处理方法,所述将所述第一子结点排列为至少两排,还包括:
确定所述第一子结点中关联有下一层次的结点的第三子结点;
将所述第三子结点设于所述第一子结点中的最后一排。
可选的,如前述的数据处理方法,还包括:
确定所述待处理数据树中对应于不同根结点的数据树;
在不同的所述数据树对应的结点之间存在重叠时,对各个所述数据树的位置进行调整,直至不存在重叠。
第二方面,本申请实施例提供了一种搭建树形图的数据处理装置,包括:
确定模块,用于确定待处理数据树中的第一父结点对应的第一子结点;
获取模块,用于获取所述第一子结点的结点数量;
排列模块,用于在所述结点数量大于预设的上限阈值时,根据所述上限阈值及所述结点数量确定将所述第一子结点排列为至少两排的排列信息;
树形图确定模块,用于根据所述排列信息生成所述待处理数据树对应的树形图。
第三方面,本申请实施例提供了一种电子设备,包括:处理器、通信接口、存储器和通信总线,其中,所述处理器、通信接口和存储器通过通信总线完成相互间的通信;
所述存储器,用于存放计算机程序;
所述处理器,用于执行所述计算机程序时,实现如前述任一项所述的处理方法。
第四方面,本申请实施例提供了一种非暂态计算机可读存储介质,其特征在于,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令使所述计算机执行如前述任一项所述的处理方法。
本申请实施例提供了一种搭建树形图的数据处理方法及装置,其中方法包括:确定待处理数据树中的第一父结点对应的第一子结点;获取所述第一子结点的结点数量;在所述结点数量大于预设的上限阈值时,根据所述上限阈值及所述结点数量确定将所述第一子结点排列为至少两排的排列信息;根据所述排列信息生成所述待处理数据树对应的树形图。本申请实施例提供的上述技术方案与现有技术相比具有如下优点:可以根据子结点的数量动态调整子结点为若干行若干列,来保证树形图的布局不会被撑得特别高或者特别宽,使得树形布局的内容更易于查看;同时,本方法无需后端支持,即可合理对树形图进行合理布局以使其便于查看,因此,可以避免因为需要进行树形图相关数据的缓存而与后端进行的数据传输。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请的一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护的范围。
图1为本申请实施例提供的一种搭建树形图的数据处理方法,包括如下所述步骤S1至S4:
步骤S1.确定待处理数据树中的第一父结点对应的第一子结点。
具体的,在第一父结点对应的第一子结点中,第一子结点为第一父结点的子结点;由于待处理数据树中的一般会存在多个结点,且,一些结点在正常情况下,既可以是其它父结点的子结点,也可以是其它子结点的父结点;因此,一个结点的身份并不是固定不变的。
本实施例中的第一父结点和第一子结点并不限于某一组结点;由于待处理数据树中会存在多个父结点,因此只要是存在子结点的父结点均适用于本实施例中的方法进行树形图的搭建。
步骤S2.获取第一子结点的结点数量。
具体的,第一子结点的结点数量即为第一父结点对应的孩子结点的数量。
步骤S3.在结点数量大于预设的上限阈值时,根据上限阈值及结点数量确定将第一子结点排列为至少两排的排列信息。
具体的,上限阈值为预先设定的数值,由于结点的数量是整数,因此上限阈值是大于1的整数;且上限阈值的具体数量,可以根据显示页面的大小进行设置,只要能够达到便于查看即可,具体的数值在此不做进一步限定。
此处至少两排可以是多列或多行,一般来说,与树形图不同层次的结点的排列方向对应;举例来说,如图7所示,当设定树形图的发散方向是横向时,则此处的“排”对应的是“列”;如图8所示,当设定树形图的发散方向是纵向时,则此处的“排”对应的是“行”。
根据上限阈值及结点数量确定将第一子结点排列为至少两排的排列信息可以是:
方法1、依次(由前至后或由后至前)在各排分配上限阈值对应数量的第一子结点,直至将所有所述第一子结点排列完,举例来说:当第一父结点对应的第一子结点包括28个时,上限阈值为5个;则按照5-5-5-5-5-3的个数设置6排第一子结点,对应的排列信息则包括设置的排数,以及各排的数量;
方法2、在各排结点数小于上限阈值的基础上,将各排的数量以最平均的方式进行分配;举例来说:当第一父结点对应的第一子结点的数量为28个时,上限阈值为10个;若按照方法1排列则为10-10-8,按照本方法,可以先确定该数量对应的除数(1、2、4、7、14、28),然后取除数(排数)与商(每排的数量)之间最接近的除数作为排数,则当除数为4时,商为7;与当除数为7时,则商为4是两组最接近的能够整除的分配方式。
此外,还可以有其它的分配策略例如:人为输入划为几行几列等等;上述举例均为本实施例的可选方案,只要可以达到每排的数量小于或等于上限阈值即可,在实际使用中还可以采用其它的分配策略。
且通过本实施例得到的排列信息可以包括设置的排数,以及各排的第一子结点的数量。
步骤S4.根据排列信息生成待处理数据树对应的树形图。
具体的,在得到第一父结点对应的第一子结点的排列信息之后,且由于待处理数据树中的每个结点(除根结点之外)均存在与其对应的父结点(将对应于同一父结点的子结点记为同一组子结点),因此,可以采用本实施例中的方法确定对应于每组子结点的排列信息;在得到排列信息之后,即可按照其对各个结点进行排列,进而得到与待处理数据树对应的树形图。
本申请实施例提供的上述技术方案可以根据子结点的数量动态调整子结点为若干行若干列,来保证树形图的布局不会被撑得特别高或者特别宽,使得树形布局的内容更易于查看;同时,本方法无需后端支持,即可合理对树形图进行合理布局以使其便于查看,因此,可以避免因为需要进行树形图相关数据的缓存而与后端进行的数据传输。
如图2所示,在一些实施例中,如前述的数据处理方法,步骤S3根据上限阈值及结点数量确定将第一子结点排列为至少两排的排列信息,包括如下所述步骤S31至S34:
步骤S31.根据上限阈值确定第一子结点排列得到的排数。
具体的,根据上线预支确定第一子结点排列得到的排数的可选实现方式可以按照前述实施例中的所举例子实现,在此不再进行赘述。
步骤S32.确定最后一排中任一第一子结点的坐标信息。
具体的,在给各个第一子结点进行排列之后,即可确定各个第一子结点的相对位置关系,但是还未得到具体的准确位置;因此,先确定最后一层中的任一第一子结点的坐标信息,可选的,一般确定最后一排中的第一个子结点或者最后一排中的最后一个子结点,因此在计算结点的坐标信息时,只需按照一个方向遍历其它结点即可,可以便于进行数据处理。
坐标信息可以是结点在树形图生成平面中的坐标,任一第一子结点的坐标信息可以是人为设定得到。
举例的,如图7和图8所示,结点4-1即为该层次的结点中的最后一排的第一个结点,结点4-3即为该层次的结点中的最后一排的最后一个结点。
步骤S33.根据任一第一子结点的坐标信息以及预设的结点间隔信息得到所有第一子结点的子结点坐标信息;
具体的,结点间隔信息包括:上下相邻的两个结点之间的第一距离信息,左右相邻的两个结点之间的第二距离信息;且结点间隔信息可以根据具体使用中进行选择,以利于清楚展示各个结点为准。
在得到第一子结点的坐标信息之后,判断待确定第一子结点与第一子结点之间的相对位置关系,当其在第一子结点的上方时,则在所述第一子结点的纵坐标上增加与第一距离信息对应的数值即可得到;当其在第一子结点的左侧时,则在所述第一子结点的横坐标上减少与第二距离信息对应的数值即可得到;待确定第一子结点在第一子结点的下方或右侧时,也可参照上述方法确定其具体的坐标信息。
步骤S34.根据子结点坐标信息得到排列信息。
也就是说,排列信息中包括各个第一子结点的子结点坐标信息,由于排列信息是用于对各个第一子结点进行排列的,因此会得到各个第一子结点与子结点坐标信息之间的对应关系,且排列信息中可以按照该对应关系对各个子结点坐标信息进行存储。举例的:当存在第一子结点A、第一子结点B和第一子结点C时,上述三个结点对应的子结点坐标信息分别为坐标I、坐标II和坐标III;则排列信息的一种可选的展现或存储方法可以是:第一子结点A-坐标I、第一子结点B-坐标II和第一子结点C-坐标III。
因此,采用本实施例中的方法,可以准确定位得到各个结点的坐标,此外,由于是通过最后一排中的结点的坐标往前遍历计算得到前排的结点的坐标,可以避免通过前一排的坐标确定后一排的坐标,导致末端的结点因为太多,而出现距离过窄甚至重叠,以及需要重新设定结点间隔信息重新排列的情况。
如图3所示,在一些实施例中,如前述的数据处理方法,步骤S33根据任一第一子结点的坐标信息以及结点间隔信息得到所有第一子结点的子结点坐标信息,还包括如下所述步骤S331和S332:
步骤S331.获取第一子结点的结点形状信息。
具体的,由于在界面中显示的树形图中的某一结点(包括子结点和父结点)都是由某一形状进行表征的,因此第一子结点的显示图形也是具备一定大小的;可选的,第一子结点的形状可以是圆形,正方形,三角形等等;当其为圆形时,对应的结点形状信息可以包括:直径/半径的长度。
步骤S332.根据任一第一子结点的坐标信息、结点间隔信息以及结点形状信息得到所有第一子结点的子结点坐标信息。
具体的,在一般情况下,第一子结点的坐标信息为其显示图形的中心位置,因此,若只按照坐标信息和结点间隔信息计算各个第一子结点的坐标,则会导致各个第一子结点之间便会发生重叠,严重影响树形图的查看。
因此,在计算各个子结点坐标信息时需增加结点形状信息作为参考量,使不同的第一子结点之间的图形不会发生重叠。举例来说:当第一子结点的形状都统一为相同大小的圆形(半径为10个单位长度),结点间隔信息对应的长度为10个单位长度,已确定第一子结点A的坐标为坐标(30,30);则第一子结点A与第一子结点B的坐标之间的距离应该是2个半径长度加上结点间隔信息对应的长度,进而计算得到位于第一子结点A上方且相邻的第一子结点B的坐标为(30,60)。
因此,通过本实施例中的方法,充分考虑到各个结点的形状特征,可以有效避免出现重叠的情况,提高树形图查看的便利性。
根据前述实施例的一种应用方法可以为:
将每组结点(对应于同一父结点的子结点的集合),构造成一个二维数组,把第二维度的每一项定义成一个JavaScript对象,数据格式如下:
{
parentId:null,//该组结点的父结点Id
nodes:[],//该组结点
rows:0,//该组结点划分为几行
cols:0,//该组结点划分为几列
size:{width:0,height:0},//该组结点宽度和高度
position:{top:0,right:0}//该组结点上部距离和右侧距离
}
在一些实施例中,如前述的数据处理方法,在得到排列信息之后,还包括如下所述步骤S5:
步骤S5.根据排列信息以及预设的父结点位置设置策略确定第一父结点的坐标。
具体的,父结点位置设置策略为用于根据子结点的位置信息确认父结点的位置信息的策略;举例来说,父结点位置设置策略可以为:指定将父结点设置在子结点的中心线位置上;父结点位置设置策略可以根据具体的应用进行调整,在此不做进一步限定。
此外,由于数据树是呈发散状排列的,往往越到末端,结点数越多,采用通过子结点确定父结点的坐标的方法即为从最大深度开始依次往前计算每个结点坐标,目的是使前一层次的坐标是根据后一层次的坐标确定,可以避免通过前一层次的坐标确定后一层次的坐标,导致前一层次的结点之间设置的距离太近,导致后一层次的结点之间的距离过窄甚至重叠,或者后一层次的结点之间为了避免重叠,与对应的父结点无法正对,影响查看等情况。
计算每组坐标时可以推算出该组结点的父结点的坐标,根据父结点的坐标及父结点的所在行,分别向上和向下推算其他行列的坐标,推算时如果某结点含有子结点,则需要结合子结点的尺寸来确定该结点的坐标,直到推算出整个树所有结点的坐标;
如图4所示,在一些实施例中,如前述的数据处理方法,在确定第一父结点的坐标之后,还包括如下所述步骤P1至P4:
步骤P1.确定与第一父结点位于同一层次的兄弟结点;
具体的,结点的层次:从根结点到树中某结点所经路径上的分支数称为该结点的层次;根结点的层次规定为1,其余结点的层次等于其双亲结点的层次加1;兄弟结点与第一父结点同为另一结点的子结点。
步骤P2.在兄弟结点为关联有下一层次中第二子结点的第二父结点时,根据第一子结点的坐标确定第二子结点的坐标;
步骤P3.根据第二子结点的坐标确定第二父结点的坐标。
也就是说,当兄弟结点存在一个或多个位于其下一层次的子结点时,该兄弟结点即为父结点,此处记为第二父结点。
由于父结点的坐标是通过其对应的子结点的坐标进行确认的,因此先根据第一子结点的坐标确定第二子结点的坐标;进而根据第二子结点的坐标确定第二父结点(即:兄弟结点)的坐标。
步骤P4.在兄弟结点没有关联有下一层次的结点时,根据第一子结点的坐标确定兄弟结点的坐标。
也就是说,当兄弟结点不存在任何位于其下一层次的子结点时,该兄弟结点只为子结点;因此只需要直接确认该兄弟结点的坐标,避免该兄弟结点与其他结点发生重叠即可。
如图5所示,在一些实施例中,如前述的数据处理方法,将第一子结点排列为至少两排,还包括如下所述步骤Q1和Q2:
步骤Q1.确定第一子结点中关联有下一层次的结点的第三子结点;
步骤Q2.将第三子结点设于第一子结点中的最后一排。
具体的,第三子结点是一种即为子结点也是父结点,如图8所示的结点3-39,其为结点2-1的子结点,也是结点4-1的父结点。
将第三子结点设于第一子结点中的最后一排,可以便于其关联下一层次的结点,且更易于查看。
在一些实施例中,如前述的数据处理方法,还包括如下所述步骤S6和S7:
步骤S6.确定待处理数据树中对应于不同根结点的数据树;
具体的,根结点(root)是数据树的一个组成部分,也叫树根;所有非空的二叉树中,都有且仅有一个根结点,根结点是同一棵树中除本身外所有结点的祖先,没有父结点;存在对应于不同的根结点的数据树,即意味着在待处理数据树中存在多个相互独立的数据树。
步骤S7.在不同的数据树对应的结点之间存在重叠时,对各个数据树的位置进行调整,直至不存在重叠。
具体的,不同的数据树对应的结点之间存在重叠可以是:通过各个数据树的结点坐标的得到的外接封闭图形之间存在重叠的情况;由于在计算不同的数据树的结点的坐标时,各个数据树都是单独计算的,因此难免会出现结点位置交叉重叠的情况;采用本实施例中的方法,对各个数据树的位置进行判断和调整,可以自动对各个坐标进行识别,防止生成的树形图存在重叠,影响查看。
如图6所示,根据本申请另一方面的一种实施例,本申请还提供了一种搭建树形图的数据处理装置,包括:
确定模块1,用于确定待处理数据树中的第一父结点对应的第一子结点;
获取模块2,用于获取第一子结点的结点数量;
排列模块3,用于在结点数量大于预设的上限阈值时,根据上限阈值及结点数量确定将第一子结点排列为至少两排的排列信息;
树形图确定模块4,用于根据排列信息生成待处理数据树对应的树形图。
具体的,本发明实施例的装置中各模块实现其功能的具体过程可参见方法实施例中的相关描述,此处不再赘述。
根据本申请的另一个实施例,还提供一种电子设备,包括:如图9所示,电子设备可以包括:处理器1501、通信接口1502、存储器1503和通信总线1504,其中,处理器1501,通信接口1502,存储器1503通过通信总线1504完成相互间的通信。
存储器1503,用于存放计算机程序;
处理器1501,用于执行存储器1503上所存放的程序时,实现上述方法实施例的步骤。
上述电子设备提到的总线可以是外设部件互连标准(Peripheral ComponentInterconnect,PCI)总线或扩展工业标准结构(Extended Industry StandardArchitecture,EISA)总线等。该总线可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
通信接口用于上述电子设备与其他设备之间的通信。
存储器可以包括随机存取存储器(Random Access Memory,RAM),也可以包括非易失性存储器(Non-Volatile Memory,NVM),例如至少一个磁盘存储器。可选的,存储器还可以是至少一个位于远离前述处理器的存储装置。
上述的处理器可以是通用处理器,包括中央处理器(Central Processing Unit,CPU)、网络处理器(Network Processor,NP)等;还可以是数字信号处理器(DigitalSignalProcessing,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
本申请实施例还提供一种非暂态计算机可读存储介质,非暂态计算机可读存储介质存储计算机指令,计算机指令使计算机执行上述方法实施例的步骤。
需要说明的是,在本文中,诸如“第一”和“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上所述仅是本发明的具体实施方式,使本领域技术人员能够理解或实现本发明。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所申请的原理和新颖特点相一致的最宽的范围。