Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Программа для реализации упорядоченного двоичного дерева




Фрагмент программы для реализации стека

Задача. Создание стека из элементов 9, 10,... 16.

nach=0; // nach - вершина стекаfor (i=9; i<=16; i++) { // Создание очередного элемента new_n=new ELEM; new_n-> info=i;if (nach) { // Если стек не пуст, очередной элемент добавляется в вершину стека new_n-> next=nach; nach=new_n; } else { // иначе стек будет состоять из одного элемента new_n-> next=0; nach=new_n; }

Двоичное (бинарное) дерево – это дерево, у каждой вершины которого может быть только два потомка.

Двоичное дерево является самым простым видом дерева. В упорядоченном дереве большее значение располагается справа от вершины, а меньшие значения слева от вершины.

Задача. Построить двоичное упорядоченное дерево из чисел 5, 7, 3, 1, 4.

 

Первый элемент (5) помещается в корень дерева:

 

Берем следующий элемент (7). Так как 7 больше 5, помещаем его в правую ветвь от 5:

 

Берем следующий элемент (3). Так как 3 меньше 5, помещаем его в левую ветвь от 5:

 

 

Берем следующий элемент (1). Так как 1 меньше 5 и левая ветвь уже существует (элемент 3), будем сравнивать 1 и 3. 1 меньше 3, поэтому помещаем 1 в левую ветвь от 3.

 

 

Берем следующий элемент (4). Так как 4 меньше 5 и левая ветвь уже существует (элемент 3), будем сравнивать 4 и 3. 4 больше 3, поэтому помещаем 4 в правую ветвь от 3. В результате получаем бинарное дерево:

 

Пример программы "Бинарное дерево".

 

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

dob – для добавления элемента,

pech – для печати элемента дерева.

 

Элемент дерева будет иметь структуру

 

 

#include <iostream.h> struct DEREVO{int info; DEREVO * next_l;DEREVO * next_r;}; void dob (DEREVO * tek, int znach); // прототип функции dobvoid pech (DEREVO *tek); // прототип функции pech void main(){ int i; DEREVO *nach, *tek, *new_n; nach=0;cout << "\n Вводите значения вершин дерева, 0 - признак окончания ввода "; do { cout << "\nВведите значение вершины"; cin >> i; if (nach) { // Если дерево не пусто, вызывается функци dob dob(nach, i); } else { // Если дерево пусто создается корень дерева new_n=new DEREVO; new_n-> info=i; new_n-> next_l=0; new_n-> next_r=0; nach=new_n; } } while (i); pech(nach); // Печать} /* Рекурсивная функция dob tek - указатель на текущую вершину дерева, znach - значение, которое необходимо добавить в дерево. Функция dob определяет, в какую ветвь нужно добавить новое значение; если znach меньше текущего значения, то производиться добавление в левую ветвь, иначе - в правую ветвь. Если ветвь нельзя добавить (такая ветвь уже существует), то снова вызывается функция dob. */ void dob (DEREVO * tek, int znach){ int i1; DEREVO *new_n; i1=tek-> info; // Если значение текущего элемента дерева меньше нового элемента if (znach<i1) { if (tek-> next_l) dob (tek->next_l,znach); else { new_n=new DEREVO; new_n-> info=znach; new_n-> next_l=0; new_n-> next_r=0; tek-> next_l=new_n; } } if (znach>i1) { if (tek-> next_r) dob (tek-> next_r,znach); else { new_n=new DEREVO; new_n-> info=znach; new_n-> next_l=0; new_n-> next_r=0; tek-> next_r=new_n; } }} // Рекурсивная функция pech. void pech (DEREVO *tek){if (tek) { pech(tek-> next_l); cout << "\n\t" << tek-> info; pech(tek-> next_r); }}

 




Поделиться с друзьями:


Дата добавления: 2014-01-04; Просмотров: 286; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.007 сек.