Дървета. Калин Георгиев. 20 октомври 2016 г. Калин Георгиев Структури от данни и програмиране 20 октомври 2016 г. 1 / 35

Подобни документи
Указатели. Маисиви, указатели, параметри на функции Калин Георгиев 21 декември 2016 г. Калин Георгиев Увод в програмирането 21 декември 2016 г. 1 / 23

Дефиниране на шаблон Шаблони (Templates) Любомир Чорбаджиев Технологическо училище Електронни системи Технически университет, София

C++

Масиви и низове Трифон Трифонов Увод в програмирането, спец. Компютърни науки, 1 поток, 2018/19 г. 15 ноември 6 декември 2018 г. Трифон Трифонов (УП 1

Динамична памет. Конструктори и деструктори Любомир Чорбаджиев Технологическо училище Електронни системи Технически университет, София

Масиви и низове Трифон Трифонов Увод в програмирането, спец. Компютърни науки, 1 поток, спец. Софтуерно инженерство, 2016/17 г. 9 ноември 2016 г. Триф

Масиви и низове Трифон Трифонов Увод в програмирането, спец. Компютърни науки, 1 поток, 2018/19 г ноември 2018 г. Трифон Трифонов (УП 18/19) Ма

Рекурсия Трифон Трифонов Увод в програмирането, спец. Компютърни науки, 1 поток, спец. Софтуерно инженерство, 2016/17 г. 21 декември 2016 г. 4 януари

Сериализация Калин Георгиев 13 май 2016 г. Калин Георгиев Обектно ориентирано програмиране 13 май 2016 г. 1 / 23

В тази част, ще разгледаме аритметичните и логически операции, както, и включването им в изрази. В следващата таблица са дадени всички възможни операц

Проф

Програмиране на Паскал

3. Синтактичен анализ. Граматика на учебен програмен език STUDENT. Извеждане на изречения от правилата на граматиката Цел на упражнението Упражнението

Геометрията в състезателното програмиране Част II Автори Христо Борисов Иван Тодоров 24 април 2009 г. Съдържание 1 Алгоритми Лице на многоъгълни

Homework 2

Kontrolno 5, variant 1

2. Наследяване в C++ Съдържание Съдържание Наследяване (Rev: 1.2) Любомир Чорбаджиев 1 1 февруари 2007 г. 1 Наследяване 1 2

Lush Green

Синтаксис за дефиниране на функции Трифон Трифонов Функционално програмиране, спец. Информатика, 2015/16 г. 6 януари 2016 г. Трифон Трифонов (ФП-И 15/

Lush Green

Резултати от предварителен изпит по Биология г. Вх. Номер Пол Словом Цифром Вх. Номер Пол Словом Цифром 1000 Жена Много добър Жен

Резултати от редовен изпит по Химия г. Вх. Вх. Пол Словом Оценка номер номер Пол Словом Оценка 7500 Жена Много добър Жена Среден

ПРИМЕРЕН ГРАФИК ЗА ОБУЧЕНИЯТА по Национална програма Обучение за ИТ кариера График на учебните занятия за ученици, които са в XII клас през учебната 2

При изпълнението на програма се извършват определени действия над данните, дефинирани в програмата.тези данни могат да бъдат постоянни ( константи ) и

8 клас

Предефиниране на оператори. Копиращ конструктор. Оператор за присвояване Любомир Чорбаджиев Технологическо училище Електронни системи Технически униве

Проф

Лабораторно упражнение 6 Тема: Оператори за цикли в езика C++. Реализиране на циклични алгоритми I. Цел на лабораторното упражнение Да се затвърдят зн

Маисви

Структура на програма в C - Част 6 - goto, switch, break и continue клаузи

Microsoft Word - tema_7_klas_2009.doc

Наръчник на учителя

ios2011 : [08] AdvancedVC_Animations_Transformations

Структура на програма в C - Част 7 - масиви, оператор за индексиране, sizeof оператор

КОНСПЕКТ ЗА ДЪРЖАВЕН ИЗПИТ

ECDL_ICDL Spreadsheets.doc

Програмен език C Пламен Танов Ненко Табаков Мартин Вачовски Технологично училище Електронни системи Технически университет София версия 0.5

2. Лексически анализ. Основни понятия и алгоритъм на лексическия анализ. Програмна структура на лексическия анализатор Цел на упражнението Упражнениет

РЕФЕРАТ по дисциплината Дискретни структури 1. (*) Докажете асоциативността на операциите обединение и сечение на множества, тоест, че за произволни м

Препис:

Дървета Калин Георгиев 20 октомври 2016 г. Калин Георгиев Структури от данни и програмиране 20 октомври 2016 г. 1 / 35

Интуиция Интуиция. Йерархична структура от данни Калин Георгиев Структури от данни и програмиране 20 октомври 2016 г. 2 / 35

Интуиция Фамилно дърво баща ниво (етаж) 0 син 1 син 2 ниво 1 внук 1 внук 2 внук 3 ниво 2 правнук 1 ниво 3 Калин Георгиев Структури от данни и програмиране 20 октомври 2016 г. 3 / 35

Интуиция Фамилно дърво родител, наследник корен листо път ниво баща ниво (етаж) 0 син 1 син 2 ниво 1 внук 1 внук 2 внук 3 ниво 2 правнук 1 ниво 3 Калин Георгиев Структури от данни и програмиране 20 октомври 2016 г. 4 / 35

Интуиция Decision Tree мъж Мъж или жена под 18 години? под 18 години? Barbie Харесва ли Поп музика Калин Георгиев Структури от данни и програмиране 20 октомври 2016 г. 5 / 35 Спортува ли? да Плакат на Metallica Лакове и червила харесва ли Star Wars? харесва ли Star Wars? Въже за скачане да не не да Лазерен меч Количка с дистанционно Щанга Робот BB-8

Интуиция Формална дефиниция и абстракция Калин Георгиев Структури от данни и програмиране 20 октомври 2016 г. 6 / 35

Дефиниция Дефиниции Свързан неориентиран граф без цикли Индуктивна дефиниция Фиксираме елемент () / D и го наричаме празно дърво Празното дърво е дърво Ако L T и R T са дървета, а x е елемент (x D), то тройката (структурата) T = (x, L T, R T ) наричаме двоично дърво T с корен x, ляво поддърво L T и дясно поддърво R T. x Калин Георгиев Структури от данни и програмиране 20 октомври 2016 г. 7 / 35

Дефиниция Дърво с числа 7 30 5 12 50 90 Калин Георгиев Структури от данни и програмиране 20 октомври 2016 г. 8 / 35

Дефиниция Двоично наредено дърво 50 < 30 90 < < 20 45 < 70 99 X 50 70 20 45 99 70 30 20 30 45 50 70 90 99 Калин Георгиев Структури от данни и програмиране 20 октомври 2016 г. 9 / 35

Представяне и операции Представяне Калин Георгиев Структури от данни и програмиране 20 октомври 2016 г. 10 / 35

Представяне и операции Тройна кутия 7 30 5 12 50 90 Калин Георгиев Структури от данни и програмиране 20 октомври 2016 г. 11 / 35

Представяне и операции Операции Калин Георгиев Структури от данни и програмиране 20 октомври 2016 г. 12 / 35

Представяне и операции Добавяне на елемент 7 30 5 12 50 90 Калин Георгиев Структури от данни и програмиране 20 октомври 2016 г. 13 / 35

Представяне и операции Следа. Добавяне и намиране на елемент L 7 30 5 R L 12 50 90 LRL LRR Калин Георгиев Структури от данни и програмиране 20 октомври 2016 г. 14 / 35

Представяне и операции Рекурсивни операции Калин Георгиев Структури от данни и програмиране 20 октомври 2016 г. 15 / 35

Представяне и операции Търсене на елемент 7 30 5 12 50 90 Калин Георгиев Структури от данни и програмиране 20 октомври 2016 г. 16 / 35

Представяне и операции Проверка за принадлежност Среща ли се елементът y сред елементите на дървото T? Празното дърво е дърво Ако L T и R T са дървета, а x е елемент (x D), то тройката (структурата) T = (x, L T, R T ) наричаме двоично дърво T с корен x, ляво поддърво L T и дясно поддърво R T. L T x R T bool member (int y, T): Ако дървото е празно, то y не е елемент на дървото. return false Ако T = (x, L T, R T ) е непразно, то y е елемент на T, ако y == x или y е елемент на L T или y е елемент на R T. return y==root(t) member (y, LT) member (y,rt) Калин Георгиев Структури от данни и програмиране 20 октомври 2016 г. 17 / 35

Представяне и операции Сума не елементите Каква е сумата на елементите на дървото? Празното дърво е дърво Ако L T и R T са дървета, а x е елемент (x D), то тройката (структурата) T = (x, L T, R T ) наричаме двоично дърво T с корен x, ляво поддърво L T и дясно поддърво R T. x S L T S R T x int sum (T): Ако дървото е празно, то сумата на елементите е 0. return 0 Ако T = (x, L T, R T ) е непразно, то сумата на елементите е сбора на сумата на елементите на L T, на сумата на елементите на R T и на числото x. return root(t) + sum (LT) + sum (RT) Калин Георгиев Структури от данни и програмиране 20 октомври 2016 г. 18 / 35

Представяне и операции Други прости рекурсивни операции Най-голям елемент в дървото Брой на елементитите в дървото Височина на дървото Брой на листата в дървото Празното дърво е дърво Ако L T и R T са дървета, а x е елемент (x D), то тройката (структурата) T = (x, L T, R T ) наричаме двоично дърво T с корен x, ляво поддърво L T и дясно поддърво R T. x?? F L T F R T x Калин Георгиев Структури от данни и програмиране 20 октомври 2016 г. 19 / 35

Представяне и операции x Сериализация Калин Георгиев Структури от данни и програмиране 20 октомври 2016 г. 20 / 35

Двоични наредени дървета Операции с двоични наредени дървета Калин Георгиев Структури от данни и програмиране 20 октомври 2016 г. 21 / 35

Двоични наредени дървета Вмъкване 50 30 90 20 45 70 99 Калин Георгиев Структури от данни и програмиране 20 октомври 2016 г. 22 / 35

Двоични наредени дървета Намиране на най-голям и най-малък елемент x y Калин Георгиев Структури от данни и програмиране 20 октомври 2016 г. 23 / 35

Двоични наредени дървета Изтриване x < < y z Калин Георгиев Структури от данни и програмиране 20 октомври 2016 г. 24 / 35

Двоични наредени дървета Изтриване x < < y z Калин Георгиев Структури от данни и програмиране 20 октомври 2016 г. 25 / 35

Двоични наредени дървета Изтриване z < < y Калин Георгиев Структури от данни и програмиране 20 октомври 2016 г. 26 / 35

Обхождания Обхождане с рекурсия VS. обхождане чрез стек Калин Георгиев Структури от данни и програмиране 20 октомври 2016 г. 27 / 35

Обхождания Отпечатване Отпечатване с рекурсия void print (t){ if ( empty (t)) return ; print ( left (t )); cout << root (t); print ( right (t )); } Калин Георгиев Структури от данни и програмиране 20 октомври 2016 г. 28 / 35

Обхождания Прецес на отпечатване print (T 50 ) print (left(t 50 ));cout << root (T 50 ); print (right(t 50 )) print (left(t 30 ));cout << root (T 30 ); print (right(t 30 )) 30 print (left(t 20 ));cout << root (T 20 ); print (right(t 20 )) 50 20 30 90 20 45 70 99 Калин Георгиев Структури от данни и програмиране 20 октомври 2016 г. 29 / 35

Обхождания Прецес на отпечатване print (T 50 ) p(t 50 ) print (left(t 50 ));cout << root (T 50 ); print (right(t 50 )) p(t 30 ) p(t 50 ):<<50;p(T 90 ) print (left(t 30 ));cout << root (T 30 ); print (right(t 30 )) p(t 20 ) p(t 30 ):<<30;p(T 45 ) p(t 50 ):<<50;p(T 90 ) 30 print (left(t 20 ));cout << root (T 20 ); print (right(t 20 )) 20 50 30 90 20 45 70 99 Калин Георгиев Структури от данни и програмиране 20 октомври 2016 г. 30 / 35

Обхождания Отпечатване чрез стек Отпечатване с рекурсия void print (t){ if ( empty (t)) return ; print ( left (t )); cout << root (t); print ( right (t )); } void print (t){ stack. push (t); while (! empty ( stack )){ x = stack. pop (); if ( x is a number ) cout << x; else { stack. push ( left (x )); stack. push ( root (x )); stack. push ( right (x ));} } } Калин Георгиев Структури от данни и програмиране 20 октомври 2016 г. 31 / 35

Обхождания Отпечатване чрез стек 50 30 90 45 70 99 20 T 20 <<30 T 30 T 45 <<50 <<50 T 50 T 90 T 90 <<20 <<30 T 45 <<50 T 90 void print (t){ stack. push (t); while (! empty ( stack )){ x = stack. pop (); if ( x is a number ) cout << x; else { stack. push ( left (x )); stack. push ( root (x )); stack. push ( right (x ));} } } <<45 <<50 T 90 T 70 <<90 T 99 <<70 <<90 T 99 <<99 Калин Георгиев Структури от данни и програмиране 20 октомври 2016 г. 32 / 35

Обхождания Обхождане с с опашка Калин Георгиев Структури от данни и програмиране 20 октомври 2016 г. 33 / 35

Обхождания Обхождане с опашка 50 30 90 20 45 70 99 Калин Георгиев Структури от данни и програмиране 20 октомври 2016 г. 34 / 35

Обхождания Въпроси? Калин Георгиев Структури от данни и програмиране 20 октомври 2016 г. 35 / 35