#include
#include
#include
Usando o namespace std;
// estrutura de dados para armazenar um nó de árvore binário
nó Struct
{
tecla int;
nó * esquerda, * direita;
};
// função para criar um novo nó de árvore binário tendo dado a chave
Nó * NewNode * NewNode (INT Tecla)
{
nó * nó = novo nó;
nó- > tecla = tecla;
nó- > left = nó- > direita = nullptr;
nó de retorno;
}
// função recursiva para executar a travessia de inorder de uma árvore binária
void inordertraversal (nó * raiz )
{
se (root == nullptr)
retorno;
inordertraversal (root- > resto);
cout < root- > ke y < < ”;
inordertraversal (root- > à direita);
}
// função recursiva para executar o postal travessia de uma árvore binária
Void Preordertraversal (raiz do nó *)
{
se (root == nullptr)
retorno;
cout < < Root- > tecla < < ”;
Preordertraversal (root- > deixado);
pré-encordertraversal (root- > direito );
}
// função recursiva para construir uma árvore binária de determinada
// inorder e preorder sequência
nó * construir (vector < int > const & inorder, int start,
Vector < int > Const & Preorder, int Pindex,
Unourdered_map < int, int > & Mapa)
{
se (iniciar > final
retorna nullptr;
// o próximo elemento no pré-encomenda será o nó raiz da subárvore
// formado por inorder
Nó * raiz = newnode (pré-encomenda);
// receba o índice de nó raiz no inorder para determinar o limite
// da subárvore esquerda e direita
Int Index = Mapa;
// Recursivamente Construa a subárvore esquerda
root- > Esquerda = construção (inorder, iniciar, Índice – 1, Preorder, Pindex, Mapa);
// Recursivamente Construa a subárvore direita
root- > Direita = construção ( inorder, índice + 1, fim, pré-encomenda, pinhex, mapa);
// retorna o nó atual
root de retorno;
}
}
// Construa uma árvore binária das travessuras de inorder e pré-encomenda
// Esta função assume s que a entrada é válida
// ie de que a sequência de inorder e pré-enchimento forma uma árvore binária
nó * construct (vector < int > Id ID = “B792411610″>
inorder, vector int > Const & pré-encomenda)
{
// Obtenha o número de nós na árvore
int n = inorder.size ();
// crie um mapa para encontrar eficientemente o índice de qualquer elemento em
// dada a sequência inorder
underdered_map < int, int > mapa;
para (int i = 0; Eu n; i ++)
mapa] = i;
// pindex armazena índice do nó improvisado próximo na sequência Preorder
// começa com nó raiz (presente em 0 ‘TH Índice)
int pindex = 0;
devolução de retorno (inorder, 0, n – 1, pré-encomenda, pinhex, mapa);
}
// função principal
int main ()
{
/ * considera abaixo a árvore
2 3