(Ir al programa C++)
Preámbulo: El primer carácter de ABECDFGHIJ es A, lo que significa que es la raíz del árbol. Luego encuentre la posición de A en el orden medio: EBCDAFHIGJ. A divide el orden en dos subcadenas: EBCD y FHIGJ son todos nodos del subárbol izquierdo y del subárbol derecho de A respectivamente.
Preámbulo: El segundo carácter de ABECDFGHIJ es B. Asimismo, divide la subcadena EBCD en dos subcadenas E y CD, que son los subárboles izquierdo y derecho con raíces en B respectivamente.
Prioridad: El tercer carácter de ABECDFGHIJ es E, que ya es un nodo hoja. Porque E es un personaje. Tanto el lado izquierdo como el derecho son cadenas vacías.
Preámbulo: El cuarto carácter de ABECDFGHIJ es C. Asimismo, divide la subcadena CD en la cadena vacía izquierda y el carácter D.
Preclasificación: El quinto carácter de ABECDFGHIJ es D, que ya es un nodo hoja. Porque D es un personaje.
.
De manera similar, se puede reconstruir el subárbol derecho de A.
--Se puede implementar de forma recursiva, ¡hágalo usted mismo!
Ejemplo:
void createbtreeFromPreM(NODE** root,char* p,char* m,int len)
{
int llen,rlen;//llen+rlen+1=len
if(p)
*root=createnode(*p);//Asignar dinámicamente memoria de nodo e inicializar
int pos=0;//posición del primer carácter en preorden en base de orden medio 0
while(*p!=*(m+pos))
pos++;
if( pos-1>0)
{
llen=pos;
createbtreeFromPreM(&(*root) ->izquierda,p+1,m,llen);
}
if(len-pos-1>0)
{
rlen=len-pos-1;
createbtreeFromPreM(&(*root)->right,p+llen+1,m+llen+1,rlen); p> p>
}
}