Construiți un arbore binar de la traversal de intrare și preordonare

#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

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *