Функция освобождения памяти, занятой деревом
void Del_Tree(Tree *t) { if (t! = NULL) { Del_Tree (t -> left); // На левую ветвь Del_Tree (t -> right); // На правую ветвь delete t; } }
Пример выполнения задания В качестве примера рассмотрим проект (для последовательно введенных ключей 10 (корень), 25, 20, 6, 21, 8, 1, 30), который создает дерево, отображает его в Memo, удаляет элемент по ключу и удаляет дерево. Панель диалога будет иметь вид, представленный на рис. 6.2. Как и в предыдущих примерах, приведем только тексты функций-обработчиков соответствующих кнопок, а тексты функций пользователя рассмотрены выше:
Рис. 6.2
//--------------------- Шаблон структуры ---------------------------------------------- struct Tree { int info; Tree *left, *right; }*root; // Корень //----------------- Декларации прототипов функций работы с деревом ---------------- void Add_List(Tree*, int); void View_Tree (Tree*, int); Tree* Del_Info(Tree*, int); void Del_Tree(Tree*); Tree* List(int); //--------------------- Текст функции-обработчика кнопки Создать -------------------- if(root! = NULL) Del_Tree(root); root = List (StrToInt(Edit1-> Text)); //--------------------- Текст функции-обработчика кнопки Просмотреть ------------ if(root == NULL) ShowMessage(" Create TREE! "); else { Memo1-> Lines-> Add(" ---------- View -----------"); View_Tree(root, 0); } //--------------------- Текст функции-обработчика кнопки Добавить ------------------ if(root == NULL) root = List (StrToInt(Edit1-> Text)); else Add_List (root, StrToInt(Edit1-> Text)); //--------------------- Текст функции-обработчика кнопки УдалитьINFO ----------- int b = StrToInt(Form1-> Edit1-> Text); root = Del_Info(root, b); //--------------------- Текст функции-обработчика кнопки ОЧИСТИТЬ --------------- Del_Tree(root); ShowMessage(" Tree Delete! "); root = NULL; //--------------------- Текст функции-обработчика кнопки EXIT ------------------------ if(root! =NULL){ Del_Tree(root); ShowMessage(" Tree Delete! "); } Close();
|