Скачать презентацию Операции с двоичными деревьями Алгоритмы поиска 10 cur Скачать презентацию Операции с двоичными деревьями Алгоритмы поиска 10 cur

7d00df1e9bac5072666dcec7a1006645.ppt

  • Количество слайдов: 22

Операции с двоичными деревьями Алгоритмы поиска 10 cur Операции с двоичными деревьями Алгоритмы поиска 10 cur

Алгоритмы обхода дерева • Прямой ptr 10 5 -7 0 6 8 18 29 Алгоритмы обхода дерева • Прямой ptr 10 5 -7 0 6 8 18 29

 • Симметричный ptr -7 0 5 6 8 10 18 29 • Симметричный ptr -7 0 5 6 8 10 18 29

 • Обратный ptr 0 -7 8 6 5 29 18 10 • Обратный ptr 0 -7 8 6 5 29 18 10

Поперечный обход дерева A B C D E F E F G H G Поперечный обход дерева A B C D E F E F G H G A B C D E F G H C H H G

Удаление элемента из дерева • Элемента со значением, равным х, в дереве не существует; Удаление элемента из дерева • Элемента со значением, равным х, в дереве не существует; Элемент со значением х является терминальным узлом; Элемент со значением х имеет одного потомка; • • 3 2 3 7 0 5 4 2 9 6 7 0 11 5 4 9 6 11

 • Элемент со значением х имеет двух потомков. 3 2 D P R • Элемент со значением х имеет двух потомков. 3 2 D P R PR 7 0 5 4 9 6 11

A Б R В Д R. right=D. right; P. left=R; P D =PR Г A Б R В Д R. right=D. right; P. left=R; P D =PR Г

A Б В D Г Д З P E PR Ж К И Л A Б В D Г Д З P E PR Ж К И Л R PR. right=R. left;

Двоичные деревья, представляемые массивами A[i] Индекс левого наследника = 2*i+1. Индекс правого наследника = Двоичные деревья, представляемые массивами A[i] Индекс левого наследника = 2*i+1. Индекс правого наследника = 2*i+2. Индекс родителя = (i-1)/2. Пример: int[] A={5, 1, 3, 9, 6, 2, 4, 7, 0, 8};

int[] A={5, 1, 3, 9, 6, 4, #, 7, #, #, #, 2}; int[] A={5, 1, 3, 9, 6, 4, #, 7, #, #, #, 2};

Турнирная сортировка int[] A=new int [8] {85, 20, 15, -45, 10, 41, 10, 36}; Турнирная сортировка int[] A=new int [8] {85, 20, 15, -45, 10, 41, 10, 36}; 2 k N k=3

O(n log 2 n) O(n log 2 n)

Пирамиды (heap-tree) Максимальные Минимальные Пирамиды (heap-tree) Максимальные Минимальные

Преобразование массива в пирамиду n n-1 (n-2)/2 Пример: Построим максимальную пирамиду int[] H=new int[10] Преобразование массива в пирамиду n n-1 (n-2)/2 Пример: Построим максимальную пирамиду int[] H=new int[10] {7, 12, 72, 43, 9, 47, 18, 30, 72, 86} 5, 6, …, 9 4, 3, …, 0

H[4]=9 H[9]=86 H[3]=43 H[8]=72 H[2]=72 H[5]=47 H[1]=12 H[3]=72 H[0]=7 H[1]=86 7 12 H[7]=30 43 H[4]=9 H[9]=86 H[3]=43 H[8]=72 H[2]=72 H[5]=47 H[1]=12 H[3]=72 H[0]=7 H[1]=86 7 12 H[7]=30 43 H[6]=18 H[4]=86 H[2]=72 30 72 9 72 86 47 18

Добавление элемента в пирамиду 86 72 72 43 30 12 7 9 47 80 Добавление элемента в пирамиду 86 72 72 43 30 12 7 9 47 80 18

Удаление из пирамиды 86 80 72 43 30 72 7 9 47 12 18 Удаление из пирамиды 86 80 72 43 30 72 7 9 47 12 18

Добавление элемента в пирамиду 86 72 72 43 30 12 7 9 47 80 Добавление элемента в пирамиду 86 72 72 43 30 12 7 9 47 80 18

Пирамидальная сортировка Пример: int A[]={54, 21, 90, 38, 23, 0}; 54 21 38 90 Пирамидальная сортировка Пример: int A[]={54, 21, 90, 38, 23, 0}; 54 21 38 90 23 38 23 0 21 0 n log 2 n