b = GetTreeNode ( 'B', NULL, d);
c = GetTreeNode ( 'C', e, NULL);
a = GetTreeNode ( 'A', b, c);
Спочатку ми створюємо сина D, який потім приєднується до свого батька B при створенні вузла. Створюється вузол E і приєднується до свого батька C під час народження (або створення) останнього. Нарешті, створюється корінь і приєднується до своїх синів B і C.
Алгоритм копіювання дерева починає працювати з кореня і в першу чергу будує ліве піддерево вузла, а потім - праве його поддерево. Тільки після цього створюється новий вузол. Той же рекурсивний процес повторюється для кожного вузла. Відповідно вузлу t вихідного дерева створюється новий вузол з покажчиками newlptr і newrptr.
При зворотному методі проходження сини відвідуються перед їх батьками. В результаті в новому дереві створюються піддерева, що відповідають t-> Left () і t-> Right (). Сини приєднуються до своїх батьків в момент створення останніх.
// створити батька і приєднати до нього його синів
newnode = GetTreeNode (t-> data, newlptr, newrptr);
Суть відвідування вузла t в початковому дереві полягає в створенні нового вузла на дереві-дублікаті.
TreeNode
MakeCharTree (root1, 0); // root1 вказує на Tree_0
Пройти нащадків вузла A, починаючи з лівого піддерева (вузла B і далі до вузла D, який є правою піддерево вузла B). Створити новий вузол з даними, рівними D, і лівим і правим покажчиками, рівними NULL.
Сини вузла B пройдені. Створити новий вузол з даними, рівними B, лівим покажчиком, рівним NULL, і правим покажчиком, що вказує на копію вузла D.
Оскільки ліве піддерево вузла A пройдено, почати проходження його правого піддерева і дійти до вузла E. Створити новий вузол з даними з вузла E і полями покажчиків, рівними NULL.
Після обробки E перейти до його батьків і створити новий вузол з даними з C. У полі правого покажчика помістити NULL, а лівому покажчику привласнити посилання на копію дочірнього вузла E.
// Створити дублікат дерева t і повернути корінь нового дерева
template
// Змінна newnode вказує на новий вузол, який створюється
// за допомогою виклику GetTreeNode і приєднується
// надалі до нового дереву.
// вузла і передаються в якості параметрів в GetTreeNode
TreeNode
// Зупинити рекурсивне проходження при досягненні
// вузлів дерева t. в кожному вузлі цього дерева функція
// створюється його копія. В іншому випадку повертається
// і підвішує до нього копії синів.
if (t-> Left ()! = NULL)
if (t-> Right ()! = NULL)
// побудувати нове дерево від низу до верху, спочатку створюючи
// двох синів, а потім їх батьків
newnode = GetTreeNode (t-> data, newlptr, newrptr);
// повернути покажчик на новостворене дерево