2K_programuvanna / Практика / 3_mod / mod3 / lab 17-19
.doc-
Лабораторная работа 17
Структура данных — бинарные деревья поиска.
Цель: ознакомится с основными принципами работы с бинарными деревьями поиска, реализовать процедуры вставки элемента из дерева, вывод дерева на экран.
-
Пример
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
typedef struct tag_tree {
int info;
struct tag_tree *left, *right;
} TREE;
TREE* add_node(TREE* root, int info){
TREE* node;
TREE* new_node = (TREE *) malloc(sizeof(TREE));
new_node->info = info;
new_node->left = NULL;
new_node->right = NULL;
while (root){
node = root;
//root = (root->info > info) ? root->left : root->right;
//DEBUG
if (root->info > info){
printf("root (%d) > info(%d) go left!\n", root->info,info);
root = root->left;
} else {
printf("root (%d) =< info(%d) go rigth!\n", root->info,info);
root = root->right;
}
//END DEBUG
}
if (node){
if (node->info > info){
node->left = new_node;
} else {
node->right = new_node;
}
}
return new_node;
}
TREE* find(TREE* root, int info){
TREE* node;
while (root){
if (root->info == info){
return root;
}
else if (root->info > info){
root = root->left;
} else {
root = root->right;
}
}
return NULL;
}
void show_tree(TREE* node){
if(node != NULL){
show_tree(node->left);
printf("%d ",node->info);
show_tree(node->right);
}
}
void del_tree(TREE* node){
if(node != NULL){
del_tree(node->left);
del_tree(node->right);
printf("\n node %d - deleted",node->info);
free(node);
}
}
int main(){
TREE* root = NULL, *current = NULL;
int value=0;
clrscr();
while(1){
printf("vvedite chislo (0 dlya vihoda)");
scanf("%d",&value);
if (value == 0) {
break;
}
current = add_node(root,value);
if (root == NULL){
root = current;
}
}
show_tree(root);
current = find(root,3)){
if (current !=NULL)
printf("For node = %d\n",3);
if (current->left != NULL){
printf("Left child is %d\n",current->left->info);
}
if (current->right != NULL){
printf("Right child is %d\n",current->right->info);
}
}
del_tree(root);
return 0;
}
-
Задание
Вставьте в дерево 5 элементов. Найдите элемент равный введенному с клавиатуры и удалите его из дерева. Выведите элементы дерева на экран используя прямой, обратный и концевой обход дерева.
-
Домашнее задание
Реализуйте процедуру удаления элемента из дерева.
-
Лабораторная работа 18,19
Задачи поиска в бинарном дереве.
Цель: получить навыки работы с бинарным деревом поиска.
-
Задания
-
Заполнить двоичное дерево целыми числами. Найдите среднее арифметическое элементов дерева.
-
Заполнить двоичное дерево и найти среднее геометрическое элементов дерева.
-
Дано дерево заполненное числами. Сформировать из него 2 дерева: в первом содержатся числа больше A, а во втором — меньшие.
-
Создать телефонный справочник, содержащий фамилии, адреса и телефонные номера абонентов, отсортировать его по фамилии. Реализовать функцию замены владельца телефонного номера.
-
Создать 2 телефонных справочника, содержащих фамилии, адреса и телефонные номера абонентов, отсортированных по фамилии. Реализовать слияние двух справочников в один.
-
Реализуйте функцию вычисления высоты дерева.
-
Реализуйте функцию возвращающую список (список, очередь или стек) состоящий из листов дерева.
-
Реализуйте функцию, возвращающую список (список, очередь или стек) состоящий из элементов дерева, которые имеею хотя-бы одного потомка.
-
Реализуйте функцию подсчета количества четных элементов в дереве.
-
Реализуйте функцию создания нового дерева из положительных элементов исходного дерева.
-
Реализутее функцию находжения уровня минимального элемена. Выведите элементы лежащее на пути от корня к минимальному элементу.
-
Реализуйте функцию, которая выводит все узлы дерева, лежащие на заднанном уровне.
-
Реализуйте функцию, которая выводит на экран все эллементы дерева, большиее среднего арифметического его элементов.