当使用"孩子兄弟表示法"存储树或森林时,最终会呈现出与二叉树类似的形态,

所以树、森林与二叉树之间的转换本质上就是画出采用孩子兄弟表示法存储的树和森林。


一."树->二叉树"的转换:

1.例一:

以上述图片左边的树为例,

现将该树转化为二叉树,本质上就是用孩子兄弟表示法存储该树,

"树->二叉树"转换技巧:

  1. 首先在一棵二叉树中画出树的根节点
  2. 按"树的层序"依次处理每个结点

上述图片左边的树的根结点为A,因此转换后的二叉树的根结点也为A,

如下图:

如上图,

接下来需要按"树的层序"依次处理每个结点,这是什么意思呢?

也就是说先处理树中第一层的A,再处理第二层的B、C,接下来处理第三层的D、H、F、E、J、K,最后处理第四层的G、I、L,就是一层一层的按顺序处理结点,按这种方式处理的话不容易乱,

首先处理树中第一层的A,处理的方法如下:

如上图,

首先要观察当前处理的结点即A在树中是否有孩子,如果有孩子,那么就要把它所有的孩子"用右指针串成糖葫芦",

对于A结点来说,他有B、C两个孩子,因此需要把B、C用右指针串成一个"冰糖葫芦"的形态,

如下图:

如上图,

接下来要在创建的二叉树中把A结点的第一个孩子即B挂在当前处理的结点即A的左指针上,

如下图:

如上图,

A结点处理完毕,接下来处理B结点,同理,

首先要观察当前处理的结点即B在树中是否有孩子,如果有孩子,那么就要把它所有的孩子"用右指针串成糖葫芦",

对于B结点来说,他有D、H、F三个孩子,因此需要把D、H、F用右指针串成一个"冰糖葫芦"的形态,

如下图:

如上图,

接下来要在创建的二叉树中把B结点的第一个孩子即D挂在当前处理的结点即B的左指针上,

如下图:

如上图,

B结点处理完毕,接下来处理C结点,同理,

首先要观察当前处理的结点即C在树中是否有孩子,如果有孩子,那么就要把它所有的孩子"用右指针串成糖葫芦",

对于C结点来说,他有E、J、K三个孩子,因此需要把E、J、K用右指针串成一个"冰糖葫芦"的形态,

如下图:

如上图,

接下来要在创建的二叉树中把C结点的第一个孩子即E挂在当前处理的结点即C的左指针上,

如下图:

如上图,

C结点处理完毕,接下来按照"树的层序"应该处理D结点,同理,

首先要观察当前处理的结点即D在树中是否有孩子,如果有孩子,那么就要把它所有的孩子"用右指针串成糖葫芦",

对于D结点来说,显然没有孩子,所以D结点不需要做任何处理;

D结点处理完毕,接下来处理H结点,同理,

首先要观察当前处理的结点即H在树中是否有孩子,如果有孩子,那么就要把它所有的孩子"用右指针串成糖葫芦",

对于H结点来说,他有G、I、L三个孩子,因此需要把G、I、L用右指针串成一个"冰糖葫芦"的形态,

如下图:

如上图,

接下来要在创建的二叉树中把H结点的第一个孩子即G挂在当前处理的结点即H的左指针上,

如下图:

如上图,

H结点处理完毕,接下来按照"树的层序"应该依次处理F、E、J、K、G、I、L结点,同理,

首先要观察当前处理的结点在树中是否有孩子,如果有孩子,那么就要把它所有的孩子"用右指针串成糖葫芦",

对于F、E、J、K、G、I、L结点来说,显然都没有孩子,所以F、E、J、K、G、I、L结点都不需要做任何处理,

至此,就完成了"树->二叉树"的转换,

如下图:

2.例二:原理同例一

以上述图片左边的树为例,

现将该树转化为二叉树,本质上就是用孩子兄弟表示法存储该树,

上述图片左边的树的根结点为A,因此转换后的二叉树的根结点也为A,

如下图:

如上图,

首先要观察当前处理的结点即A在树中是否有孩子,如果有孩子,那么就要把它所有的孩子"用右指针串成糖葫芦",

对于A结点来说,他有B、C、F、L四个孩子,因此需要把B、C、F、L用右指针串成一个"冰糖葫芦"的形态,

如下图:

如上图,

接下来要在创建的二叉树中把A结点的第一个孩子即B挂在当前处理的结点即A的左指针上,

如下图:

如上图,

A结点处理完毕,接下来需要按"树的层序"依次处理每个结点,因此接下来处理B结点,

首先要观察当前处理的结点即B在树中是否有孩子,如果有孩子,那么就要把它所有的孩子"用右指针串成糖葫芦",

对于B结点来说,他有D、H两个孩子,因此需要把D、H用右指针串成一个"冰糖葫芦"的形态,

如下图:

如上图,

接下来要在创建的二叉树中把B结点的第一个孩子即D挂在当前处理的结点即B的左指针上,

如下图:

如上图,

B结点处理完毕,接下来需要按"树的层序"依次处理每个结点,因此接下来处理C结点,

首先要观察当前处理的结点即C在树中是否有孩子,如果有孩子,那么就要把它所有的孩子"用右指针串成糖葫芦",

对于C结点来说,他有E、J两个孩子,因此需要把E、J用右指针串成一个"冰糖葫芦"的形态,

如下图:

如上图,

接下来要在创建的二叉树中把C结点的第一个孩子即E挂在当前处理的结点即C的左指针上,

如下图:

如上图,

C结点处理完毕,接下来需要按"树的层序"依次处理每个结点,因此接下来处理F结点,

首先要观察当前处理的结点即F在树中是否有孩子,如果有孩子,那么就要把它所有的孩子"用右指针串成糖葫芦",

对于F结点来说,他只有一个孩子即K结点,

因此接下来要在创建的二叉树中把F结点的第一个孩子即K挂在当前处理的结点即F的左指针上,

如下图:

如上图,

F结点处理完毕,接下来需要按"树的层序"依次处理每个结点,因此接下来处理L结点,

首先要观察当前处理的结点即L在树中是否有孩子,如果有孩子,那么就要把它所有的孩子"用右指针串成糖葫芦",

对于L结点来说,L结点没有孩子,所以不需要处理,

如下图:

如上图,

L结点处理完毕,接下来需要按"树的层序"依次处理每个结点,因此接下来处理D结点,

首先要观察当前处理的结点即D在树中是否有孩子,如果有孩子,那么就要把它所有的孩子"用右指针串成糖葫芦",

对于D结点来说,他只有一个孩子即G结点,

因此接下来要在创建的二叉树中把D结点的第一个孩子即G挂在当前处理的结点即D的左指针上,

如下图:

如上图,

D结点处理完毕,接下来需要按"树的层序"依次处理每个结点,因此接下来处理H结点,

首先要观察当前处理的结点即H在树中是否有孩子,如果有孩子,那么就要把它所有的孩子"用右指针串成糖葫芦",

对于H结点来说,H结点没有孩子,所以不需要处理,

如下图:

如上图,

H结点处理完毕,接下来需要按"树的层序"依次处理每个结点,因此接下来处理E结点,

首先要观察当前处理的结点即E在树中是否有孩子,如果有孩子,那么就要把它所有的孩子"用右指针串成糖葫芦",

对于E结点来说,他只有一个孩子即I结点,

因此接下来要在创建的二叉树中把E结点的第一个孩子即I挂在当前处理的结点即E的左指针上,

如下图:

如上图,

E结点处理完毕,接下来按照"树的层序"应该依次处理J、K、G、I结点,同理,

首先要观察当前处理的结点在树中是否有孩子,如果有孩子,那么就要把它所有的孩子"用右指针串成糖葫芦",

对于J、K、G、I结点来说,显然都没有孩子,所以J、K、G、I结点都不需要做任何处理,

至此,就完成了"树->二叉树"的转换,

如下图:


二."森林->二叉树"的转换:

1.例一:

如上图,

"森林->二叉树"的转换思路与"树->二叉树"的转换思路类似,

唯一需要注意的是第一步中树只有1个根结点,而森林至少有2两个平级的根结点,

森林中所有的根结点视为平级的兄弟结点,

所以森林转换为二叉树的时候,第一步需要把森林中所有的根结点用右指针"串成糖葫芦",

本例中森林的根结点为A、D、G,

如下图:

如上图,

接下来按照"森林的层序"依次处理每个结点,"森林的层序"就是指把整个森林看作一个整体,

第一层就是A、D、G,第二层就是B、C、E、H、I、J,第三层就是F、K、L、M、N、O,第四层就是P,因此处理顺序就是A->D->G->B->C->E->H->I->J->F->K->L->M->N->O->P,

首先处理树中第一层的A,处理的方法如下:

如上图,

首先要观察当前处理的结点即A在树中是否有孩子,如果有孩子,那么就要把它所有的孩子"用右指针串成糖葫芦",

对于A结点来说,他有B、C两个孩子,因此需要把B、C用右指针串成一个"冰糖葫芦"的形态,

如下图:

如上图,

接下来要在创建的二叉树中把A结点的第一个孩子即B挂在当前处理的结点即A的左指针上,

如下图:

如上图,

A结点处理完毕,接下来需要按"树的层序"依次处理每个结点,因此接下来处理D结点,

首先要观察当前处理的结点即D在树中是否有孩子,如果有孩子,那么就要把它所有的孩子"用右指针串成糖葫芦",

对于D结点来说,他只有一个孩子即E结点,

因此接下来要在创建的二叉树中把D结点的第一个孩子即E挂在当前处理的结点即D的左指针上,

如下图:

如上图,

D结点处理完毕,接下来需要按"树的层序"依次处理每个结点,因此接下来处理G结点,

首先要观察当前处理的结点即G在树中是否有孩子,如果有孩子,那么就要把它所有的孩子"用右指针串成糖葫芦",

对于G结点来说,他有H、I、J三个孩子,因此需要把H、I、J用右指针串成一个"冰糖葫芦"的形态,

如下图:

如上图,

接下来要在创建的二叉树中把G结点的第一个孩子即H挂在当前处理的结点即G的左指针上,

如下图:

如上图,

G结点处理完毕,接下来按照"树的层序"应该依次处理B、C结点,同理,

首先要观察当前处理的结点在树中是否有孩子,如果有孩子,那么就要把它所有的孩子"用右指针串成糖葫芦",

对于B、C结点来说,显然都没有孩子,所以B、C结点都不需要做任何处理;

B、C结点处理完毕,接下来需要按"树的层序"依次处理每个结点,因此接下来处理E结点,

首先要观察当前处理的结点即E在树中是否有孩子,如果有孩子,那么就要把它所有的孩子"用右指针串成糖葫芦",

对于E结点来说,他只有一个孩子即F结点,

因此接下来要在创建的二叉树中把E结点的第一个孩子即F挂在当前处理的结点即E的左指针上,

如下图:

如上图,

E结点处理完毕,接下来需要按"树的层序"依次处理每个结点,因此接下来处理H结点,

首先要观察当前处理的结点即H在树中是否有孩子,如果有孩子,那么就要把它所有的孩子"用右指针串成糖葫芦",

对于H结点来说,他有K、L两个孩子,因此需要把K、L用右指针串成一个"冰糖葫芦"的形态,

如下图:

如上图,

接下来要在创建的二叉树中把H结点的第一个孩子即K挂在当前处理的结点即H的左指针上,

如下图:

如上图,

H结点处理完毕,接下来按照"树的层序"应该处理I结点,同理,

首先要观察当前处理的结点即I在树中是否有孩子,如果有孩子,那么就要把它所有的孩子"用右指针串成糖葫芦",

对于I结点来说,显然都没有孩子,所以I结点都不需要做任何处理;

I结点处理完毕,接下来需要按"树的层序"依次处理每个结点,因此接下来处理J结点,

首先要观察当前处理的结点即J在树中是否有孩子,如果有孩子,那么就要把它所有的孩子"用右指针串成糖葫芦",

对于J结点来说,他有M、N、O三个孩子,因此需要把M、N、O用右指针串成一个"冰糖葫芦"的形态,

如下图:

如上图,

接下来要在创建的二叉树中把J结点的第一个孩子即M挂在当前处理的结点即J的左指针上,

如下图:

上图,

J结点处理完毕,接下来按照"树的层序"应该依次处理F、K、L结点,同理,

首先要观察当前处理的结点在树中是否有孩子,如果有孩子,那么就要把它所有的孩子"用右指针串成糖葫芦",

对于F、K、L结点来说,显然都没有孩子,所以F、K、L结点都不需要做任何处理;

F、K、L结点处理完毕,接下来需要按"树的层序"依次处理每个结点,因此接下来处理M结点,

首先要观察当前处理的结点即M在树中是否有孩子,如果有孩子,那么就要把它所有的孩子"用右指针串成糖葫芦",

对于M结点来说,他只有一个孩子即P结点,

因此接下来要在创建的二叉树中把M结点的第一个孩子即P挂在当前处理的结点即M的左指针上,

如下图:

如上图,

M结点处理完毕,接下来按照"树的层序"应该依次处理N、O、P结点,同理,

首先要观察当前处理的结点在树中是否有孩子,如果有孩子,那么就要把它所有的孩子"用右指针串成糖葫芦",

对于N、O、P结点来说,显然都没有孩子,所以N、O、P结点都不需要做任何处理,

至此,就完成了"森林->二叉树"的转换,

如下图:

2.例二:原理同例一

如上图,

"森林->二叉树"的转换思路与"树->二叉树"的转换思路类似,

唯一需要注意的是第一步中树只有1个根结点,而森林至少有2两个平级的根结点,

森林中所有的根结点视为平级的兄弟结点,

所以森林转换为二叉树的时候,第一步需要把森林中所有的根结点用右指针"串成糖葫芦",

本例中森林的根结点为A、C、F、L,

如下图:

如上图,

接下来按照"森林的层序"依次处理每个结点,"森林的层序"就是指把整个森林看作一个整体,

第一层就是A、C、F、L,第二层就是B、E、J、K,第三层就是D、H、I,第四层就是G,因此处理顺序就是A->C->F->L->B->E->J->K->D->H->I->G,

处理方法同例一,

最终的结果如下图:


三."二叉树->树"的转换:

1.例一:

以上述图片左边的二叉树为例,

现在把该二叉树转换为树,

"二叉树->树"的转换技巧:

  1. 先画出树的根结点
  2. 从树的根结点开始,按"树的层序"恢复每个结点的孩子

(注:按"树的层序"是为了不容易出错)

上述图片左边的二叉树的根结点为A,因此转换后的树的根结点为A,

如下图:

如上图,

接下来从树的根结点A开始,按"树的层序"恢复每个结点的孩子(注意是从树的层序开始恢复,不是二叉树,也就是按照上述图片右边的树的层序恢复,不是上述图片左边的二叉树),

那么如何恢复一个结点的孩子呢?

当前处理的是根结点A,也就是要恢复结点A的孩子,此时就要观察在上述图片内左侧的二叉树中结点A有没有左孩子,如果有左孩子,那么就要把它的左孩子以及"一整串右指针糖葫芦"拆下来(如果没有左孩子,就不需要做恢复孩子的处理;如果有左孩子但没有"一整串右指针糖葫芦",那么只需要把左孩子挂上即可,"一整串右指针糖葫芦"看作NULL)->对于A结点来说,就需要把它的左孩子即B结点以及"一整串右指针糖葫芦"即C结点拆下来,再把B、C分别挂在A结点的下方,

如下图:

如上图,

至此,A结点的孩子恢复完毕,按照"树的层序",接下来要恢复B结点的孩子(注:是按照树的层序,即按照上述图片右边的树的层序,不是上述图片左边的二叉树),

当前处理的是B结点,此时就要观察在上述图片内左侧的二叉树中结点B有没有左孩子,如果有左孩子,那么就要把它的左孩子以及"一整串右指针糖葫芦"拆下来->对于B结点来说,就需要把它的左孩子即D结点以及"一整串右指针糖葫芦"即H、F结点拆下来,再把D、H、F分别挂在B结点的下方,

如下图:

如上图,

至此,B结点的孩子恢复完毕,按照"树的层序",接下来要恢复C结点的孩子(注:是按照树的层序,即按照上述图片右边的树的层序,不是上述图片左边的二叉树),

当前处理的是C结点,此时就要观察在上述图片内左侧的二叉树中结点C有没有左孩子,如果有左孩子,那么就要把它的左孩子以及"一整串右指针糖葫芦"拆下来->对于C结点来说,就需要把它的左孩子即E结点以及"一整串右指针糖葫芦"即J、K结点拆下来,再把E、J、K分别挂在C结点的下方,

如下图:

如上图,

至此,C结点的孩子恢复完毕,按照"树的层序",接下来要恢复D结点的孩子(注:是按照树的层序,即按照上述图片右边的树的层序,不是上述图片左边的二叉树),

当前处理的是D结点,此时就要观察在上述图片内左侧的二叉树中结点D有没有左孩子,如果有左孩子,那么就要把它的左孩子以及"一整串右指针糖葫芦"拆下来->对于D结点来说,由于D结点的左指针为空,说明D结点没有左孩子,所以D结点不需要做恢复孩子的处理;

至此,D结点的孩子恢复完毕,按照"树的层序",接下来要恢复H结点的孩子(注:是按照树的层序,即按照上述图片右边的树的层序,不是上述图片左边的二叉树),

当前处理的是H结点,此时就要观察在上述图片内左侧的二叉树中结点H有没有左孩子,如果有左孩子,那么就要把它的左孩子以及"一整串右指针糖葫芦"拆下来->对于H结点来说,就需要把它的左孩子即G结点以及"一整串右指针糖葫芦"即I、L结点拆下来,再把G、I、L分别挂在H结点的下方,

如下图:

如上图,

至此,H结点的孩子恢复完毕,按照"树的层序",接下来要依次恢复F、E、J、K、G、I、L结点的孩子(注:是按照树的层序,即按照上述图片右边的树的层序,不是上述图片左边的二叉树),

然而对于F、E、J、K、G、I、L结点来说,F、E、J、K、G、I、L结点在上述图片内左侧的二叉树中都没有左孩子,所以F、E、J、K、G、I、L结点都不需要做恢复孩子的处理,

至此,就完成了上述图片中左边的"二叉树->树"的转换,

如下图:

2.例二:原理同例一


四."二叉树->森林"的转换:

1.例一:

如上图,

"二叉树->森林"的转换思路与"二叉树->树"的转换思路类似,

唯一需要注意的是森林中至少有两棵树,

所以把二叉树转换为森林的时候首先要把二叉树的根结点和根结点右指针上的一整串结点全部拆下来,

上述图片中左边的二叉树的根结点为A,A的右指针上的一整串结点依次为D、G,

因此A、D、G分别是该森林中三棵树的根结点,

如下图:

如上图,

接下来按照"森林的层序"依次恢复结点的孩子,

首先需要恢复A结点的孩子,此时就要观察在上述图片内左侧的二叉树中结点A有没有左孩子,如果有左孩子,那么就要把它的左孩子以及"一整串右指针糖葫芦"拆下来->对于A结点来说,就需要把它的左孩子即B结点以及"一整串右指针糖葫芦"即C结点拆下来,再把B、C分别挂在A结点的下方,

如下图:

如上图,

至此,A结点的孩子恢复完毕,接下来按照"森林的层序"依次恢复结点的孩子,

因此需要恢复D结点的孩子,此时就要观察在上述图片内左侧的二叉树中结点D有没有左孩子,如果有左孩子,那么就要把它的左孩子以及"一整串右指针糖葫芦"拆下来->对于D结点来说,就需要把它的左孩子即E结点拆下来,由于E结点的"一整串右指针糖葫芦"为空,因此不需要管,所以只需要把E挂在D结点的下方即可,

如下图:

如上图,

至此,D结点的孩子恢复完毕,接下来按照"森林的层序"依次恢复结点的孩子,

因此需要恢复G结点的孩子,此时就要观察在上述图片内左侧的二叉树中结点G有没有左孩子,如果有左孩子,那么就要把它的左孩子以及"一整串右指针糖葫芦"拆下来->对于G结点来说,就需要把它的左孩子即H结点以及"一整串右指针糖葫芦"即I、J结点拆下来,再把H、I、J分别挂在G结点的下方,

如下图:

如上图,

至此,G结点的孩子恢复完毕,接下来按照"森林的层序"依次恢复结点的孩子,

因此需要恢复B结点的孩子,此时就要观察在上述图片内左侧的二叉树中结点B有没有左孩子,如果有左孩子,那么就要把它的左孩子以及"一整串右指针糖葫芦"拆下来->对于B结点来说,B结点没有左孩子,因此B结点不需要做恢复孩子的处理,同理按照"森林的层序"接下来需要恢复C结点的孩子,由于C结点在上述图片内左侧的二叉树中没有左孩子,所以也不需要做恢复孩子的处理;

接下来按照"森林的层序"依次恢复结点的孩子,

因此需要恢复E结点的孩子,此时就要观察在上述图片内左侧的二叉树中结点E有没有左孩子,如果有左孩子,那么就要把它的左孩子以及"一整串右指针糖葫芦"拆下来->对于E结点来说,就需要把它的左孩子即F结点拆下来,由于F结点的"一整串右指针糖葫芦"为空,因此不需要管,所以只需要把F挂在E结点的下方即可,

如下图:

如上图,

至此,E结点的孩子恢复完毕,接下来按照"森林的层序"依次恢复结点的孩子,

因此需要恢复H结点的孩子,此时就要观察在上述图片内左侧的二叉树中结点H有没有左孩子,如果有左孩子,那么就要把它的左孩子以及"一整串右指针糖葫芦"拆下来->对于H结点来说,就需要把它的左孩子即K结点以及"一整串右指针糖葫芦"即L结点拆下来,再把K、L分别挂在H结点的下方,

如下图:

如上图,

至此,H结点的孩子恢复完毕,接下来按照"森林的层序"依次恢复结点的孩子,

因此需要恢复I结点的孩子,此时就要观察在上述图片内左侧的二叉树中结点I有没有左孩子,如果有左孩子,那么就要把它的左孩子以及"一整串右指针糖葫芦"拆下来->对于I结点来说,I结点没有左孩子,因此I结点不需要做恢复孩子的处理;

接下来按照"森林的层序"依次恢复结点的孩子,

因此需要恢复J结点的孩子,此时就要观察在上述图片内左侧的二叉树中结点J有没有左孩子,如果有左孩子,那么就要把它的左孩子以及"一整串右指针糖葫芦"拆下来->对于J结点来说,就需要把它的左孩子即M结点以及"一整串右指针糖葫芦"即N、O结点拆下来,再把M、N、O分别挂在J结点的下方,

如下图:

如上图,

至此,J结点的孩子恢复完毕,接下来按照"森林的层序"依次恢复结点的孩子,

因此需要依次恢复F、K、L结点的孩子,此时就要观察在上述图片内左侧的二叉树中结点F、K、L有没有左孩子,如果有左孩子,那么就要把它们的左孩子以及"一整串右指针糖葫芦"拆下来->对于F、K、L结点来说,F、K、L结点都没有左孩子,因此F、K、L结点都不需要做恢复孩子的处理;

接下来按照"森林的层序"依次恢复结点的孩子,

因此需要恢复M结点的孩子,此时就要观察在上述图片内左侧的二叉树中结点M有没有左孩子,如果有左孩子,那么就要把它的左孩子以及"一整串右指针糖葫芦"拆下来->对于M结点来说,就需要把它的左孩子即P结点拆下来,由于P结点的"一整串右指针糖葫芦"为空,因此不需要管,所以只需要把P挂在M结点的下方即可,

如下图:

如上图,

至此,M结点的孩子恢复完毕,接下来按照"森林的层序"依次恢复结点的孩子,

因此需要依次恢复N、O、P结点的孩子,此时就要观察在上述图片内左侧的二叉树中结点N、O、P有没有左孩子,如果有左孩子,那么就要把它们的左孩子以及"一整串右指针糖葫芦"拆下来->对于N、O、P结点来说,N、O、P结点都没有左孩子,因此N、O、P结点都不需要做恢复孩子的处理,

至此,就完成了上述图片左边的"二叉树->森林"的转换,

如下图:

2.例二:原理同例一


五.总结:


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/916481.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/916481.shtml
英文地址,请注明出处:http://en.pswp.cn/news/916481.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring 核心流程

Spring 核心流程前言一、AbstractApplicationContext#refresh 方法解析1.1 前置1.2 refresh 方法1.2.1 prepareRefresh1.2.2 obtainFreshBeanFactory1.2.3 prepareBeanFactory1.2.4 postProcessBeanFactory1.2.5 invokeBeanFactoryPostProcessors1.2.6 registerBeanPostProcess…

RS485转Profinet网关与JRT激光测距传感器在S7-1200 PLC系统中的技术解析与应用

RS485转Profinet网关与JRT激光测距传感器在S7-1200 PLC系统中的技术解析与应用技术核心:协议转换与数据桥梁在工业自动化系统中,RS485转Profinet网关承担着协议翻译官的角色。以XD-MDPN100型号为例,其本质是将RS485设备的串口数据封装为Profi…

《C++ string 完全指南:string的模拟实现》

string的模拟实现 文章目录string的模拟实现一、浅拷贝和深拷贝1.浅拷贝2.深拷贝3.写时拷贝二、定义string的成员变量三、string的接口实现1.string的默认成员函数(1)构造函数实现(2)析构函数实现(3)拷贝构…

造成服务器内存不足的原因有什么

服务器在日常的运行过程中,会存储大量关于企业重要的数据信息,偶尔会出现内存飙升空间不足的情况,服务器内存作为服务器数据处理和存储的主要空间,异常占用会导致服务器性能降低,影响到企业业务的响应速度,…

JVM、Dalvik、ART垃圾回收机制

一、JVM垃圾回收机制(桌面/服务器端)1. 核心算法:分代收集新生代回收(Minor GC)触发条件:Eden区满时触发算法:复制算法(Eden → Survivor区)过程:存活对象在S…

数学专业转型数据分析竞争力发展报告

一、核心优势拆解(1)数学能力与数据分析对应关系数学课程数据分析应用场景比较优势说明概率论假设检验设计能准确判断统计显著性阈值实变函数数据质量评估异常值检测的严格性更高线性代数特征工程构建矩阵运算优化模型训练效率(2)…

JAVA进阶--MySQL

一.MySQL架构连接层:处理客户端连接服务,认证授权相关的操作服务层:最核心的一层(核心服务功能),处理sql,包括sql优化,函数调用....存储引擎层:存储引擎是真正负责来操作数据的(mysql中数据的存储和提取), mysql中有不同存储引擎,…

【架构】Docker简单认知构建

作为一个之前从来没有接触过Docker的倒霉蛋,想了解学习一下Docker 搜了CSDN和RUNOOB,得到的描述如下: Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。 Docker 可以让开发者打包他们的应用以及依赖包…

C++ std::list概念与使用案例

C std::list 概念详解 std::list 是 C 标准模板库(STL)中的一个双向链表容器。与 vector 和 array 不同,它不保证元素在内存中连续存储,而是通过指针将各个元素连接起来。 核心特性 双向链表结构: 每个元素包含指向前驱…

从0到1学Pandas(六):Pandas 与数据库交互

目录一、数据库基础操作1.1 连接数据库1.2 执行 SQL 查询1.3 创建与修改表结构二、数据导入导出2.1 从数据库读取数据2.2 将数据写入数据库2.3 大数据量处理三、数据库事务处理3.1 事务概念与实现3.2 批量数据更新3.3 错误处理与回滚四、数据库性能优化4.1 查询性能优化4.2 连接…

GitHub 趋势日报 (2025年07月26日)

📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图602Qwen3-Coder573neko527hrms275BillionMail153Win11Debloat115hyperswitch57data…

机器人仿真(2)Ubuntu24.04下RTX5090配置IsaacSim与IsaacLab

目录 一、前言二、电脑配置三、配置步骤3.1 创建Conda环境3.2 安装PyTorch3.3 安装Isaac Sim3.4 安装Isaac Lab 四、总结 一、前言 博主自从去年开始就一直在关注Isaac Lab和Isaac Sim,但是一直以来由于手头设备只有4060,甚至没有达到最低配置16GB显存要…

DaVinci Resolve 19.0(达芬奇)软件安装包下载及详细安装教程|附带安装文件

[软件名称]:ArcGIS [软件大小]:2.99 GB [系统要求]:支持Win7及更高版本 [下载通道]: 迅雷网盘 [下载链接]:高速下载地址 https://pan.xunlei.com/s/VOW9nw-JV99A_7f_5hhpgqO2A1?pwdbufh# ⚠️:先用手机下载迅雷网盘保存到手机中&#xff0c…

Java学习第八十一部分——Shiro

目录 📫 一、前言提要简介 🛡️ 二、核心功能介绍 ⚙️ 三、核心架构组件 ☕ 四、与Java的关系 ⚖️ 五、与Spring Security对比 🧩 六、典型应用场景 💎 七、总结归纳概述 📫 一、前言提要简介 Apache Shiro 是…

虚拟机ubuntu20.04共享安装文件夹

ubuntu20.04共享安装文件夹 4.5 共享安装文件夹 将Windows存放安装文件的文件夹共享给虚拟机,如下图操作:如果是在ubuntu20.04中,还需要以下的操作: sudo mkdir /mnt/hgfs 此命令无效 sudo echo ‘vmhgfs-fuse /mnt/hgfs fu…

如何查看电脑后门IP和流量?

你是否也有以下经历?深夜,你的电脑风扇突然狂转,屏幕却一片寂静;每月流量莫名超标,账单高得离谱;鼠标偶尔不听使唤…这些可能不是电脑“闹脾气”,如何一探究竟? 想象一下&#xff1a…

分类预测 | MATLAB基于四种先进的优化策略改进蜣螂优化算法(IDBO)的SVM多分类预测

分类预测 | MATLAB基于四种先进的优化策略改进蜣螂优化算法(IDBO)的SVM多分类预测 目录分类预测 | MATLAB基于四种先进的优化策略改进蜣螂优化算法(IDBO)的SVM多分类预测分类效果基本介绍多策略量子自适应螺旋搜索算法研究摘要1. 引言1.1 研究背景1.2 研究意义1.3 研究目标2. 文…

Android 修改系统时间源码阅读

链接:XRefAndroid - Support Android 16.0 & OpenHarmony 5.0 (AndroidXRef/AospXRef) 这里看的Android 10的代码,选中Android 10,勾选所有工程,搜索DateTimeSettings‌: 看到showTimePicker应该是显示一个设置时…

关于自定义域和 GitHub Pages(Windows)

GitHub Pages 支持使用自定义域,或将站点 URL 的根目录从默认值(例如 )更改为您拥有的任何域,比如octocat.github.io。 谁可以使用此功能? GitHub Pages 在公共存储库中提供 GitHub Free 和 GitHub Free for organizations,在公共和私有存储库中提供 GitHub Pro、GitHub …

自动驾驶领域中的Python机器学习

数据预处理与特征工程 在自动驾驶系统中,数据是驱动决策的核心。从传感器(如摄像头、激光雷达、毫米波雷达)收集的原始数据通常包含噪声、缺失值和异常值,需要进行系统的预处理。Python的pandas库提供了强大的数据处理能力&#x…