Содержание
- 2. Способы изображения древовидных структур Граф Вложенные скобки (A(B(E,F(I,J)),C(G),D(H)))
- 3. Вложенные множества Ломаная последовательность A B E F I J C G D H
- 4. Двоичные (бинарные) деревья {R} - корневой узел {L1, L2, ..., Lm} - левое поддерево R {R1,
- 5. N глубина = int (log2N). N=10 000 int(log210 000) = int(13.28) = 13
- 6. Структура двоичного дерева С использованием массива TREE[n]; TREE[K] - TREE[2K+1], TREE[2K+2] В виде динамической структуры struct
- 7. Идеально сбалансированное дерево Взять один узел в качестве корня. Левое поддерево: nl=n/2. Правое поддерево: nr=n-nl-1. Пример:
- 8. TREE* maketree(int n) {TREE *ptr; int nl, nr, x; if (n==0) return NULL; nl=n/2; nr=n-nl-1; ptr=new
- 9. Двоичные деревья выражений 6*(4-2) (3+5)*(8-4)+2 (7/3+(5+6)*2)/4
- 10. Деревья двоичного поиска O(N) O(log2N)
- 11. Пример: 32, 1, 98, -4, 34, -87, 25, 6, 10, 9, 19 32 98 -4 34
- 12. void build(TREE *tt, char ch) { if (ch dann) if (tt->pleft==NULL) {left=new TREE; tt->pleft=left; left->dann=ch; left->pleft=NULL;
- 13. Операции с двоичными деревьями Алгоритмы поиска TREE * poisk(TREE *ptr, char ch) { while(ptr->dann!=ch && ptr)
- 14. TREE *parent=NULL; TREE *find(char x, TREE* ptr) { while (ptr!=NULL) { if (x==ptr->dann) break; else {parent=ptr;
- 15. Алгоритмы обхода дерева Прямой void preorder(TREE *ptr) { if (ptr) { putchar(ptr->dann); if (ptr->pleft) preorder(ptr->pleft); if
- 16. Симметричный void inorder(TREE *ptr) { if (ptr) { if (ptr->pleft) inorder(ptr->pleft); putchar(ptr->dann); if (ptr->pright) inorder(ptr->pright); }
- 17. Обратный void postorder(TREE *ptr) { if (ptr) { if (ptr->pleft) postorder(ptr->pleft); if (ptr->pright) postorder(ptr->pright); putchar(ptr->dann); }
- 18. Вертикальная печать дерева A B C D E F G H
- 19. Удаление дерева TREE* del(TREE *t) { if (t!=NULL) { del(t->pleft); del(t->pright); delete t; } return NULL;
- 20. Удаление элемента из дерева Элемента со значением, равным х, в дереве не существует; Элемент со значением
- 21. Элемент со значением х имеет двух потомков. 3 2 7 0 5 9 4 6 11
- 22. R->right=D->right; P->left=R; A Б Г В Д D =PR R P
- 23. PR->right=R->left; A Б Г В Д D PR R P E Ж З К И Л
- 24. Двоичные деревья, представляемые массивами A[i] Индекс левого наследника = 2*i+1. Индекс правого наследника = 2*i+2. Индекс
- 25. int A[]={5, 1, 3, 9, 6, 4, #, 7, #, #, #, 2};
- 26. Турнирная сортировка A[8]={85, 20, 15, -45, 10, 41, 10, 36} 2k≥N k=3
- 29. O(n log2n)
- 30. Пирамиды (heap-tree) Максимальные Минимальные
- 31. Преобразование массива в пирамиду n n-1 (n-2)/2 Пример: Построим максимальную пирамиду int H[10]={7, 12, 72, 43,
- 32. H[4]=9 H[9]=86 H[3]=43 H[8]=72 H[7]=30 H[2]=72 H[5]=47 H[6]=18 H[1]=12 H[3]=72 H[4]=86 H[0]=7 H[1]=86 H[2]=72 7 12
- 33. Добавление элемента в пирамиду 86 72 72 43 12 47 18 30 9 7 80
- 34. Удаление из пирамиды 86 80 72 43 72 47 18 30 9 7 12
- 35. Пирамидальная сортировка Пример: int A[]={54, 21, 90, 38, 23, 0}; 54 21 90 38 23 0
- 37. Скачать презентацию