Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Практика 4

.pdf
Скачиваний:
5
Добавлен:
16.06.2019
Размер:
55.93 Кб
Скачать

Практика 4 “Бинарное дерево поиска”

Задание 1

Необходимо реализовать структуры данных и функции для работы с бинарным деревом поиска:

/* структура для хранения узла дерева. Необходимо хранить ссылки на потомков, предка и некоторое значение (целое чис ло) */

struct node;

/* структура для хранения дерева. хранит ссылку на корень дерева и количество элементов в дереве */

struct tree;

// инициализация пустого дерева void init(tree* t);

//удалить все элементы из дерева void clear(tree* t);

/* поиск элемента по значению. вернуть 0 если элемент найд ен и ссылку на найденнйы элемент в переменную n если n != NULL. в случае если элемент не найден вернуть 1

*/

int find(tree* t, int value, node* n);

/* вставка значения в дерево. вернуть 0 если вставка выпол нена успешна, 1 если элемент уже существует

2 если не удалось выделить память для нового элемента

*/

int insert(tree* t, int value);

/* удалить элемент из дерева. вернуть 0 если элемент был у дален и 1 если нет элемента с указанным значением */

int remove(tree* t, int value);

/* удалить минимальный элемент из поддерева, корнем которо го является n. вернуть значение удаленного элемента */

int removeMin(node* n);

/* выполнить правое вращение поддерева, корнем которого яв ляется n. вернуть 0 при успещшно выполнение операции и 1 в

случае если вращение невозможно */ int rotateRight(node *n);

/* выполнить левое вращение поддерева, корнем которого явл яется n. вернуть 0 при успещшно выполнение операции и 1 в

случае если вращение невозможно */ int rotateLeft(node *n);

// вывести все значения из поддерева корнем которого являе тся n по уровнем, начиная с корня. каждый уровень выводитс я на своей строке. элементы в строке разделяются пробелом.

если на указанном месте нет элемента, заменить его значен ием '_'. Если дерево пусто вывести '-'

void print(node* n);

// вывести все значения дерева t, аналогично функции print void printTree(tree* t);

Используя реализованные функции реализовать программу которая:

1.создать пустое дерево, считать 4 элементов ai, |ai| ≤ 2147483647 и занести их в дерево;

2.вывести дерево используя функцию printTree;

input

output

 

 

2 1 3 2

2

 

 

 

1 3

 

 

3.считать 3 элементов ai, |ai| ≤ 2147483647 и занести их в дерево;

4.вывести дерево используя функцию printTree;

input

output

 

 

0 4 5

2

 

 

 

1 3

 

 

 

 

0 _ _ 4

_ _ _ _ _ _ _ 5

5.считать m1, |m1| ≤ 2147483647 и найти элемент с заданным значением в дереве. вывести через пробел значение предка и потомков найденного элемента. если элемент не найден,

вывести "_", если нет значений предка или потомков вывести

’ вместо таких значений.

input

output

 

 

3

2 _ 4

 

 

6.считать m2, |m2| ≤ 2147483647 и найти элемент с заданным значением в дереве. вывести через пробел значение предка и потомков найденного элемента. если элемент не найден,

вывести ‘-’, если нет значений предка или потомков вывести

‘_’ вместо таких значений.

input

output

 

 

6

-

 

 

7.считать m3, |m3| ≤ 2147483647 и удалить из дерева элемент с заданным значением

8.вывести деревео используя printTree

input

output

 

 

2

3

 

 

 

 

1 4

0 _ _ 5

9.выполнять левый поворот дерева относительно корня, пока это возможно.

10.вывести дерево используя команду printTree

input output

5

4 _

3 _ _ _

1 _ _ _ _ _ _ _

0 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

11.выполнять правый поворот дерева относительно корня, пока это возможно.

12.вывести дерево используя команду printTree

input output

0

_ 1

_ _ _ 3

_ _ _ _ _ _ _ 4

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 5

13.вывести на экран количество элементов в дереве

14.очистить дерево

15.вывести дерево на экран используя printTree

итого входные и выходные данные должны выглядить следующим

образом

input

output

 

 

 

2 1 3 2

2

 

 

 

 

0 4 5

1

3

 

 

 

3

2

 

 

 

 

6

1

3

 

 

 

2

0

_ _ 4

 

 

 

_ _ _ _ _ _ _ 5

 

 

 

 

2

_ 4

 

 

 

 

-

 

 

 

 

 

3

 

 

 

 

 

1

4

 

 

 

 

0

_ _ 5

 

 

 

 

5

 

 

 

 

 

4

_

 

 

 

 

3

_ _ _

 

 

 

 

1

_ _ _ _ _ _ _

 

 

 

 

 

 

0 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

0

_ 1

_ _ _ 3

_ _ _ _ _ _ _ 4

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 5

5

-