#include
#include
#include
Utilizzo dello spazio dei nomi std;
// Struttura dei dati per memorizzare un nodo albero binario
Struct nodo
{
INT Chiave;
Nodo * Sinistra, * Destra;
};
// Funzione per creare un nuovo nodo albero binario che ha dato la chiave
nodo * newnode (tasto int)
{
nodo * nodo = nodo nuovo;
node- > tasto = tasto;
nodo- > sinistra = nodo- > destra = nullpr;
Nodo di ritorno;
}
}
// Funzione ricorsiva per eseguire Traversal inordinaria di un albero binario
Void inOrderTraversal (nodo * radice )
{
if (root == nullptr)
return;
inordertraversal (root- > a sinistra);
cout < < root- > ke y < < ”;
INORDERRAVERSAL (root- > Destra);
}
}
// Funzione ricorsiva per eseguire Postorder Traversal di un albero binario
Void Preordertraversal (nodo * root)
{
if (root == nullptr)
return;
cout < < root- > tasto < < ”;
preordertraversal (root- > a sinistra);
preordertraversal (root- > Destra );
}
// funzione ricorsiva per costruire un albero binario dalla data specificata
// inosservazione e sequenza preordinabile
nodo * Costruct (vector < int > cost & inorder, int-part, int End,
Vector < int > cost & preordine, int
preorder id = “B79 2411610 “>
Pindex,
UNORDED_MAP < INT, INT > & mappa)
{
// caso base
se (avvia > fine )
return nullptr;
// Il prossimo elemento nel preordine sarà il nodo root del sottostruttore
// formato da inordinatore
Nodo * root = newnode (preordine);
// Ottieni l’indice del nodo root in Inorder per determinare il confine
// del sottoteso di sinistra e destra
INT INDICE = Mappa;
// Costruisci ricorsivamente la sottostruttura sinistra
root- > sinistra = costrutto (inordinata, inizio, indice – 1, preorder, pindex, mappa);
// costruire ricorsivamente la sottostruttura destra
root- > destra = costrutto ( inorder, indice + 1, fine, preordine, pindex, mappa);
// ritorno nodo corrente
return root;
}
// Costruisci un albero binario da Inorder e PREORDERS Traversals
// Questa funzione assume s che l’input è valido
// IE date sequence inordiner e preordinato forma un albero binario
nodo * costrutto (vettoriale < int > cost & inorder, vector < int > cost & preordine)
{
// ottenere il numero di nodi nell’albero
int n = inorder.size ();
// Creare una mappa per trovare in modo efficiente l’indice di qualsiasi elemento in
// data sequenza inordinata
burroded_map < INT, INT > Mappa;
per (int I = 0; I < N; I ++)
map] = i;
// Peldex memorizza indice del prossimo nodo non trasformato in sequenza preordinabile
// Avvia con nodo root (presente a 0 ‘TH INDICE)
int Pindex = 0;
Costrutto di ritorno (inordinaria, 0, n – 1, preordine, pindex, mappa);
}
// funzione principale
int main ()
{
/ * Considera sotto l’albero
2 3