Copierea unui copac

b = GetTreeNode ("B", NULL, d);

c = GetTreeNode ('C', e, NULL);

a = GetTreeNode ('A', b, c);

Mai întâi creează un fiu D, care apoi se alătură părintelui B atunci când creează nodul. Se creează un nod E care se alătură familiei sale C la momentul nașterii (sau creării) celui din urmă. În cele din urmă, se creează o rădăcină și se unește cu fiii ei B și C.







Algoritmul copierii copacilor începe să lucreze din rădăcină și construiește mai întâi subdrivea stângă a nodului, iar apoi - subdrija sa dreaptă. Abia după aceea se creează un nou nod. Același proces recursiv se repetă pentru fiecare nod. În consecință, nodul t al arborelui sursă creează un nod nou cu indicele newlptr și newrptr.

Cu metoda inversă de trecere, fiii sunt vizitați în fața părinților lor. Drept rezultat, în arborele nou, sunt create substrele corespunzătoare t-> stânga () și t-> dreapta (). Fiii se alătură părinților lor în momentul creării acestora din urmă.

// creați un părinte și îi atacați pe fiii lui

newnode = GetTreeNode (t-> date, newlptr, newrptr);

Esența nodului de vizitare t din arborele sursă este crearea unui nod nou în arborele duplicat.

TreeNode * root1, * root2; // declarați doi copaci







MakeCharTree (root1, 0); // root1 indică Tree_0

Treceți descendenții nodului A, începând cu subordonul din stânga (nodul B și apoi la nodul D, care este subdriga dreaptă a nodului B). Creați un nou nod cu date egale cu D, indicatorii stânga și dreapta egali cu NULL.

Fiii nodului B sunt trecuți. Creați un nou nod cu date egale cu B, un indicator de stânga egal cu NULL și un indicator corect îndreptat spre o copie a nodului D.

Deoarece nodul A subramificație lăsat finalizat, începe trecerea acestuia subarborelui drept și să ajungă la nodul E. crea un nou nod cu datele din nodul E și pointerii egal cu NULL.

După procesarea E, mergeți la părintele său și creați un nou nod cu datele din C. În câmpul cu pointerul drept, puneți NULL și atribuiți pointerul stâng copiei nodului copil E.

// Creați un arbore duplicat t și returnați rădăcina arborelui nou

șablon

// Variabila newnode indică noul nod care este creat

// apelând GetTreeNode și atașat

// în viitorul copac nou.

// nod și trecute ca parametri pentru GetTreeNode

TreeNode * newlptr, * newrptr, * newnode;

// Opriți trecerea recursivă atunci când ajunge

// nodurile copacului t. în fiecare nod al acestei funcții de arbore

// copia sa este creată. În caz contrar, se întoarce

// și atârnă copiile fiilor săi.

dacă (t-> stânga ()! = NULL)

dacă (t-> dreapta ()! = NULL)

// construi un nou copac de jos în sus, creând mai întâi

// doi fii, apoi părinții lor

newnode = GetTreeNode (t-> date, newlptr, newrptr);

// returnați pointerul la arborele nou creat







Articole similare

Trimiteți-le prietenilor: