#include
#include
#include
Utilizarea spațiului de nume STD;
// structură de date pentru a stoca un nod arbore binar
struct nod
{
tasta
nod * stânga, * dreapta;
};
// Pentru a crea un nou nod de copac binar care a dat cheie
nod * nounode (int cheie)
{
nod * nod = nod nou;
nod- > cheie = cheie;
nod- iv id = „6140d4475a”
stânga = nod- iv id = „6140d4475a”
dreapta = nulptr;
retur nod;
}
// Funcție recursivă Pentru a efectua traversal inorder al unui copac binar
Void Inordertraversal (nod * rădăcină )
{
dacă (root == nulptr)
retur;
inordertraversal (root- > stânga);
cout < iv id = „2504c0ef5c”
root- > ke y < iv id = „2504C0EF5C”
” ”
inordertraversal (root- > dreapta);
}
// Funcție recursivă pentru a efectua traversarea posterioară a unui copac binar
VOID PREORDERTRAVERSAL (nod * rădăcină)
{
dacă (root == nulptr)
retur;
cout < < root- > < ”;
preordertraversal (rădăcină-> stânga);
preordertraversal (root- > dreapta );
}
// funcția recursivă pentru a construi un arbore binar de la administrația
// inorder și secvența preorder
nod * Construct (vector iv id = „2504c0ef5c”
int > const & inorder, int Start, int sfârșit,
vector < int > const & PREOANDER, INT pindex,
neidertate_map < Int, int > & harta)
{
// bază de bază
dacă (start > final )
retur nulptr;
// Următorul element în preordonare va fi nodul rădăcină al subtreei
// format de intrarea
Nod * rădăcină = newnode (preordonare);
// obțineți indicele nodului rădăcină în Inorder pentru a determina limita
// // Subtree
INT Index = harta;
// construirea recursiv Subtree stânga
root- iv id = „6140d4475a”
stânga = construct (Inorder, Start, Index – 1, PREOANDE, PINDEX, MAP);
// construirea recursiv subtree
root- iv id = „6140d4475a”
dreapta = construct ( Index, index + 1, capăt, preordonare, pindex, hartă);
// retur nod curent
retur rădăcină;
}
// construirea unui arbore binar de la traversalele inorder și de preordonare
// această funcție presupune s este necesar ca intrarea să fie validă
// adordare a secvenței de intrare și de preordonare formează un copac binar
nod * construct (vector < Int iv id = „6140d4475a”
const & inorder, vector < int > const & preordonate)
{
// obține numărul de noduri din copac
int n = inorder.Size ();
// Creați o hartă pentru a găsi eficient indexul oricărui element din
// secvență inorder
Unordated_map < Int, int
pentru (int i = 0; i < n; i ++)
hartă] = i;
// PIDEX Magazine Indicele următoarei noduri neprelucrate în secvența preorder
// Începeți cu nodul rădăcină (prezent la 0 „Index)
int pindex = 0;
Construcție de întoarcere (inorder, 0, n – 1, preorder, pindex, hartă);
}
// Funcție principală
int Main ()
{
/ * ia în considerare sub copac
2 3