Lab2
.docxЛабораторна робота 2. Робота з структурами даних типу «дерево»
Студента ИТ 14-1 Красовського Абхая
Вариант №11
Мета роботи: навчитися розробляти та використовувати динамічні структури даних, що мають вигляд дерева.
Ход работы
Індивідуальне завдання
Динамічна структура даних для всіх варіантів – бінарне дерево. Функції обробки динамічної структури даних взяти з індивідуального завдання до лабораторної роботи №1 (таблиця 1).
Листинг программы:
public class TreeElement {
int data;
TreeElement left;
TreeElement right;
}
public class Main {
public static void main(String argv[]) {
int a[] = { 20, 10, 8, 12, 30, 25, 34, 22 };
TreeElement treeElement = new TreeElement();
first(treeElement, a[0]); /*формирование первого узла дерева */
for (int i = 1; i < 8; i++)
addElement (treeElement, a[i]); /* добавление узлов дерева */
System.out.println("Tree: ");
printTree (treeElement); /* вывод элементов дерева на экран */
System.out.println();
System.out.println("Tree 2: ");
printTreeLevel(treeElement, 0); /* вывод элементов дерева на экран по уровням */
treeElement = null; /* Удаление дерева производится так потому, что в java
нет ручного освобождения пямяти */
System.out.println();
System.out.println("Tree 3: ");
printTree(treeElement);
}
/* формирование первого узла дерева */
public static void first(TreeElement tempElement, int data) {
tempElement.data = data;
tempElement.left = tempElement.right = null;
}
/* поиск места для нового узла возвращаем адрес узла,
после которого нужно добавить новый элемент */
public static TreeElement search(TreeElement tempElement, int data) {
TreeElement pv = tempElement, ppv = pv;
while (pv != null) {
ppv = pv;
if (data < pv.data)
pv = pv.left;
else pv = pv.right;
}
return ppv;
}
public static void addElement(TreeElement tempElement, int data) {
TreeElement ppv, newElement = new TreeElement();
newElement.data = data;
newElement.left = null;
newElement.right = null;
ppv = search(tempElement, data); /* поиск места для нового узла */
if (data < ppv.data)
ppv.left = newElement; /* присоединение к левому поддереву предка */
else
ppv.right = newElement; /* присоединение к правому поддереву предка */
}
/* обход дерева и вывод значений в отсортированном порядке */
public static void printTree(TreeElement tempElement) {
if (tempElement != null) {
printTree(tempElement.left); /* обход левого поддерева */
System.out.print(tempElement.data + " ");
printTree(tempElement.right); /* обход правого поддерева */
}
}
public static void printTreeLevel(TreeElement tempElement, int level) {
if (tempElement != null) {
printTreeLevel(tempElement.left, level + 1);
for (int i = 0; i < level; i++) System.out.print(" ");
System.out.print(tempElement.data + " ");
printTreeLevel(tempElement.right, level + 1);
}
}
}