Слайд 2Рекурсивная функция просмотра списка
void prosmotr_2(struct element *tek)
{
if( tek !=
![Рекурсивная функция просмотра списка void prosmotr_2(struct element *tek) { if( tek !=](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/886656/slide-1.jpg)
NULL )
{
printf("%d", tek->d);
prosmotr_2(tek->link);
}
}
Слайд 3Рекурсивная функция построения списка
void vvod_2(struct elemeny **t)
{
int i;
scanf("%d", &i);
![Рекурсивная функция построения списка void vvod_2(struct elemeny **t) { int i; scanf("%d",](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/886656/slide-2.jpg)
if (i != 0)
{
*t=(struct element *)malloc(sizeof(struct element));
(*t)->d = i;
vvod_2(&((*t)->link));
}
else
*t=NULL;
}
Слайд 4Функция main()
int main()
{
struct element *nach;
vvod_2(&nach);
prosmotr_2(nach);
![Функция main() int main() { struct element *nach; vvod_2(&nach); prosmotr_2(nach); . . . }](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/886656/slide-3.jpg)
. . .
}
Слайд 5Бинарное дерево и структура
в динамической памяти
![Бинарное дерево и структура в динамической памяти](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/886656/slide-4.jpg)
Слайд 6Способы обхода деревьев
Сверху (прямой порядок прохождения дерева);
Слева направо (обратный порядок);
Снизу (концевой порядок
![Способы обхода деревьев Сверху (прямой порядок прохождения дерева); Слева направо (обратный порядок); Снизу (концевой порядок прохождения).](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/886656/slide-5.jpg)
прохождения).
Слайд 7Алгоритм 1. Прямой порядок.
Попасть в корень.
Пройти левое поддерево.
Пройти правое поддерево
A B
![Алгоритм 1. Прямой порядок. Попасть в корень. Пройти левое поддерево. Пройти правое поддерево A B C](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/886656/slide-6.jpg)
C
Слайд 8Алгоритм 2. Обратный порядок.
Пройти левое поддерево.
Попасть в корень.
Пройти правое поддерево.
B A
![Алгоритм 2. Обратный порядок. Пройти левое поддерево. Попасть в корень. Пройти правое поддерево. B A C](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/886656/slide-7.jpg)
C
Слайд 9Алгоритм 3. Концевой порядок.
Пройти левое поддерево.
Пройти правое поддерево.
Попасть в корень.
B C
![Алгоритм 3. Концевой порядок. Пройти левое поддерево. Пройти правое поддерево. Попасть в корень. B C A](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/886656/slide-8.jpg)
A
Слайд 10Обход дерева в прямом порядке
a b d e c f
![Обход дерева в прямом порядке a b d e c f](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/886656/slide-9.jpg)
Слайд 11Обход дерева в обратном порядке
d b e a c f
![Обход дерева в обратном порядке d b e a c f](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/886656/slide-10.jpg)
Слайд 12Обход дерева в концевом порядке
d e b f c a
![Обход дерева в концевом порядке d e b f c a](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/886656/slide-11.jpg)
Слайд 13Описание типа
struct node
{
char info;
struct node *llink;
struct node
![Описание типа struct node { char info; struct node *llink; struct node *rlink; };](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/886656/slide-12.jpg)
*rlink;
};
Слайд 14Функция main()
int main()
{
struct node *root;
vtree(&root);
btree(root);
![Функция main() int main() { struct node *root; vtree(&root); btree(root); btree2(); return 0; }](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/886656/slide-13.jpg)
btree2();
return 0;
}
Слайд 15Как вводить дерево
A B . . C . .
![Как вводить дерево A B . . C . .](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/886656/slide-14.jpg)
Слайд 16Рекурсивная функция построения
бинарного дерев
Параметр функции – указатель на указатель на корень
![Рекурсивная функция построения бинарного дерев Параметр функции – указатель на указатель на](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/886656/slide-15.jpg)
дерева
Вершины дерева – символьные данные
Слайд 17void vtree(struct node **t)
{
char c;
scanf("%c", &c);
if (c !=
![void vtree(struct node **t) { char c; scanf("%c", &c); if (c !=](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/886656/slide-16.jpg)
’.’)
{
*t=(struct node *)malloc(sizeof(struct node ));
(*t)->info=c;
vtree(&((*t)->llink));
vtree(&((*t)->rlink));
}
else
*t=NULL;
}
Слайд 18Как вводить дерево
a b d .. f . . c g .
![Как вводить дерево a b d .. f . . c g](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/886656/slide-17.jpg)
. e . .
Слайд 19Как вводить дерево
A B D . G . . . C E
![Как вводить дерево A B D . G . . . C](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/886656/slide-18.jpg)
. . F H . . J . .
Слайд 20Функция рекурсивного обхода дерева
void btree(struct node *t)
{
if (t != NULL)
{
![Функция рекурсивного обхода дерева void btree(struct node *t) { if (t !=](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/886656/slide-19.jpg)
btree(t->llink); // обойти левое поддерево
printf("%c ", t->info); // попасть в корень
btree(t->rlink); // обойти правое поддерево
}
}
Слайд 21Алгоритм стекового обхода дерева
ROOT – указатель на бинарное дерево;
А – стек, в который заносятся
![Алгоритм стекового обхода дерева ROOT – указатель на бинарное дерево; А –](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/886656/slide-20.jpg)
адреса еще не пройденных вершин;
TOP – вершина стека;
P – рабочая переменная-указатель.
Слайд 22Алгоритм стекового обхода дерева
Начальная установка:
TOP = 0; P = ROOT;
Если P =
![Алгоритм стекового обхода дерева Начальная установка: TOP = 0; P = ROOT;](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/886656/slide-21.jpg)
NULL, то перейти на 4 (конец ветви).
Вершину заносим в стек:
TOP = TOP+1; A[TOP] = P;
шаг по левой ветви: P = P->llink;
перейти на 2 (идем по левой ветви).
Если TOP = 0, то КОНЕЦ.
Достаем вершину из стека:
P = A[TOP]; TOP = TOP-1;
Шаг по правой связи: P = P->rlink;
перейти на 2.
Слайд 23Блок-схема алгоритма обхода
бинарного дерева
![Блок-схема алгоритма обхода бинарного дерева](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/886656/slide-22.jpg)