140 likes | 382 Views
Лекция 8 Красно-черные деревья. План лекции Определение красно-черного дерева и его высота. Вращения Вставка элемента, восстановление структуры дерева Удаление элемента, процедура RB_Delete_Fixup. Красно-черные деревья.
E N D
Лекция 8Красно-черные деревья План лекции • Определение красно-черного дерева и его высота. • Вращения • Вставка элемента, восстановление структуры дерева • Удаление элемента, процедура RB_Delete_Fixup.
Красно-черные деревья • Красно-черное дерево –это двоичное дерево поиска, вершины которого разделены на красные и черные. Двоичное дерево поиска называется красно-чернымдеревом, если оно обладает следующими свойствами: • Каждая вершина – либо черная, либо красная. • Корень дерева является черным • Каждый лист (NIL) – черный. • Если вершина красная, оба ее ребенка черные. • Все пути, идущие вниз от корня к листьям, содержат одинаковое количество черных вершин.
Высота красно-черного дерева • Красно-черное дерево с n внутренними вершинами (т.е. не считая NIL-листьев) имеет высоту не больше 2*log(n+1) • Поддерево с корнем в x содержит по меньшей мере 2bh(x) – 1 внутренних вершин (bh(x) – черная высота вершины x). Для листьев черная высота равна 0. Если вершина не является листом и имеет черную высоту k, то оба ее ребенка имеют черную высоту не меньше k-1. По предположению индукции левое и правое поддеревья вершины x содержат не менее 2k-11вершин, поэтому поддерево с корнем в x содержит по меньшей мере 2k-1-1 + 2k-1-1 +1= 2k-1 внутренних вершин. Черная высота дерева не меньше h/2.Тогда n>= 2h/2-1. Ч.т.д.
RB-DELETE (T, z) 1 if left[z] = nil[T] or right[z] = nil[T] 2 then y = z 3 else y = TREE-SUCCESSOR(z) 4 if left[y] != nil[T] 5 then x = left[y] 6 else x = right[y] 7 p[x] = p[y] 8 if p[y] = nil[T] 9 then root[T] = x 10 else ify = left[p[y]] 11 thenleft[p[y]] = x 12 elseright[p[y]] = x 13 ify != z 14 thenkey[z] = key[y] 15 If y has other fields, copy them, too. 16 ifcolor[y] = BLACK 17 then RB-DELETE-FIXUP (T,x) 18 returny Удаление