Бинарные деревья

Содержание

Слайд 2

Рекурсивная функция просмотра списка

void prosmotr_2(struct element *tek)
{
if( tek !=

Рекурсивная функция просмотра списка void prosmotr_2(struct element *tek) { if( tek !=
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",
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); . . . }
  
 . . .     
}

Слайд 5

Бинарное дерево и структура в динамической памяти

Бинарное дерево и структура в динамической памяти

Слайд 6

Способы обхода деревьев

Сверху (прямой порядок прохождения дерева);
Слева направо (обратный порядок);
Снизу (концевой порядок

Способы обхода деревьев Сверху (прямой порядок прохождения дерева); Слева направо (обратный порядок); Снизу (концевой порядок прохождения).
прохождения).

Слайд 7

Алгоритм 1. Прямой порядок.

Попасть в корень.
Пройти левое поддерево.
Пройти правое поддерево
A B

Алгоритм 1. Прямой порядок. Попасть в корень. Пройти левое поддерево. Пройти правое поддерево A B C
C

Слайд 8

Алгоритм 2. Обратный порядок.

Пройти левое поддерево.
Попасть в корень.
Пройти правое поддерево.
B A

Алгоритм 2. Обратный порядок. Пройти левое поддерево. Попасть в корень. Пройти правое поддерево. B A C
C

Слайд 9

Алгоритм 3. Концевой порядок.

Пройти левое поддерево.
Пройти правое поддерево.
Попасть в корень.
B C

Алгоритм 3. Концевой порядок. Пройти левое поддерево. Пройти правое поддерево. Попасть в корень. B C A
A

Слайд 10

Обход дерева в прямом порядке

a b d e c f

Обход дерева в прямом порядке a b d e c f

Слайд 11

Обход дерева в обратном порядке

d b e a c f

Обход дерева в обратном порядке d b e a c f

Слайд 12

Обход дерева в концевом порядке

d e b f c a

Обход дерева в концевом порядке d e b f c a

Слайд 13

Описание типа

struct node    {      char info;      struct node *llink;      struct node

Описание типа struct node { char info; struct node *llink; struct node *rlink; };
*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; }
  
   btree2();    
   return 0;
}

Слайд 15

Как вводить дерево

 A B . . C . .

Как вводить дерево A B . . C . .

Слайд 16

Рекурсивная функция построения бинарного дерев

Параметр функции – указатель на указатель на корень

Рекурсивная функция построения бинарного дерев Параметр функции – указатель на указатель на
дерева
Вершины дерева – символьные данные

Слайд 17

void vtree(struct node **t)
{
 char c;
  scanf("%c", &c);
  if (c !=

void vtree(struct node **t) { char c; scanf("%c", &c); if (c !=
’.’)
  {
   *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
. e . .

Слайд 19

Как вводить дерево

 A B D . G . . . C E

Как вводить дерево A B D . G . . . C
. . F H . . J . .

Слайд 20

Функция рекурсивного обхода дерева
void btree(struct node *t)
{
 if (t != NULL)
{

Функция рекурсивного обхода дерева void btree(struct node *t) { if (t !=
btree(t->llink); // обойти левое поддерево
  printf("%c ", t->info); // попасть в корень
  btree(t->rlink); // обойти правое поддерево
  }
}

Слайд 21

Алгоритм стекового обхода дерева

ROOT – указатель на бинарное дерево; 
А – стек, в который заносятся

Алгоритм стекового обхода дерева ROOT – указатель на бинарное дерево; А –
адреса еще не пройденных вершин; 
TOP – вершина стека; 
P – рабочая переменная-указатель.

Слайд 22

Алгоритм стекового обхода дерева

Начальная установка: TOP = 0; P = ROOT;
Если P =

Алгоритм стекового обхода дерева Начальная установка: TOP = 0; P = ROOT;
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

Блок-схема алгоритма обхода бинарного дерева

Блок-схема алгоритма обхода бинарного дерева
Имя файла: Бинарные-деревья.pptx
Количество просмотров: 46
Количество скачиваний: 2