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

2K_programuvanna / 3 mod / lab 17-19

.doc
Скачиваний:
32
Добавлен:
19.04.2015
Размер:
35.84 Кб
Скачать
  1. Лабораторная работа 17

Структура данных — бинарные деревья поиска.

Цель: ознакомится с основными принципами работы с бинарными деревьями поиска, реализовать процедуры вставки элемента из дерева, вывод дерева на экран.

    1. Пример

#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;

}

    1. Задание

Вставьте в дерево 5 элементов. Найдите элемент равный введенному с клавиатуры и удалите его из дерева. Выведите элементы дерева на экран используя прямой, обратный и концевой обход дерева.

    1. Домашнее задание

Реализуйте процедуру удаления элемента из дерева.

  1. Лабораторная работа 18,19

Задачи поиска в бинарном дереве.

Цель: получить навыки работы с бинарным деревом поиска.

  1. Задания

  1. Заполнить двоичное дерево целыми числами. Найдите среднее арифметическое элементов дерева.

  2. Заполнить двоичное дерево и найти среднее геометрическое элементов дерева.

  3. Дано дерево заполненное числами. Сформировать из него 2 дерева: в первом содержатся числа больше A, а во втором — меньшие.

  4. Создать телефонный справочник, содержащий фамилии, адреса и телефонные номера абонентов, отсортировать его по фамилии. Реализовать функцию замены владельца телефонного номера.

  5. Создать 2 телефонных справочника, содержащих фамилии, адреса и телефонные номера абонентов, отсортированных по фамилии. Реализовать слияние двух справочников в один.

  6. Реализуйте функцию вычисления высоты дерева.

  7. Реализуйте функцию возвращающую список (список, очередь или стек) состоящий из листов дерева.

  8. Реализуйте функцию, возвращающую список (список, очередь или стек) состоящий из элементов дерева, которые имеею хотя-бы одного потомка.

  9. Реализуйте функцию подсчета количества четных элементов в дереве.

  10. Реализуйте функцию создания нового дерева из положительных элементов исходного дерева.

  11. Реализутее функцию находжения уровня минимального элемена. Выведите элементы лежащее на пути от корня к минимальному элементу.

  12. Реализуйте функцию, которая выводит все узлы дерева, лежащие на заднанном уровне.

  13. Реализуйте функцию, которая выводит на экран все эллементы дерева, большиее среднего арифметического его элементов.

Соседние файлы в папке 3 mod