#include
#include
#include
Ús de l’espai de noms STD;
// Estructura de dades per emmagatzemar un node d’arbre binari
Node struct
{
tecla int;
node * esquerra, * dreta;
};
// funció per crear un nou node d’arbre binari que ha donat clau
node * newnode (tecla int)
{
node * node = nou node;
node- > clau = clau;
node- > esquerra = node- > dreta = nullptr;
Node de retorn;
}
// funció recursiva per realitzar un recorregut inorder d’un arbre binari
buit inorddertrapersal (node * root )
{
si (root == nullptr)
Tornar;
InortDertrapersal (root- > esquerra);
cout < < root- > ke y < < ”;
inorddertrapersal (root- > dreta);
}
// Funció recursiva per realitzar un recorregut recurrent d’un arbre binari
void preordertrapersal (node * root)
{
si (root == nullptr)
Retorna;
cout < < root- > clau < < ”;
preordertrapersal (root- > esquerra);
preordertrapersal (root- > );
}
// funció recursiva per construir un arbre binari des de donat
// seqüència de preordenació i preorden
node * Construcció (vector < int > const & inordder, int inici, int, final,
vector < int > const & preorden, int pindex,
unorded_map < int, int > & Mapa)
{
// cas base
si (inici > final )
retorn nullptr;
// El següent element de preordenació serà el node arrel de subárbol
// format per inorder
Node * root = newnode (preorder);
// Obteniu l’índex de node root a l’inici per determinar el
// límit del subarbre esquerre i dret
int index = mapa;
// Construir recursivament el subarbre esquerre
root- > esquerra = construcció (inordenta, inici, Índex – 1, preorden, Pindex, Mapa);
// Construeix recursivament el subárbol de la dreta
root- > dreta = construcció ( Inorder, índex + 1, final, preorden, pindex, mapa);
// Tornar node actual
Retor de retorn;
}
// Construir un arbre binari de recorreguts de preordenació i preorden
// Aquesta funció assumeix S que l’entrada és vàlida
// és a dir, la seqüència d’inordenta i preordenació forma un arbre binari
Node * Construct (vector < int > const & inorder, vector < int > const & preorden)
{
// Obteniu el nombre de nodes a l’arbre
int n = inorder.size ();
// Creeu un mapa per trobar eficaçment l’índex de qualsevol element a
// donat seqüència d’inordentació
unorded_map < int, int > mapa;
per (int i = 0; i < n; I ++)
mapa] = i;
// pindex botigues Índex del node següent no processat en seqüència de preorden
// Inicieu amb el node root (present a 0 Índex)
int pindex = 0;
Construcció de retorn (inordenta, 0, n – 1, preorden, pindex, mapa);
}
// Funció principal
int Main ()
{
/ * Penseu per sota de l’arbre
2 3