Изменения

Перейти к: навигация, поиск

Левосторонние красно-чёрные деревья

418 байт добавлено, 01:30, 14 марта 2018
Вставка
==Вставка==
Вставка в LLRB базируется на <tex>4<\tex> протых операциях:
*Вставка нового узла в низ деревfк листу дерева: if (h == null) return new Node(key, value, RED);*Расщепление узла с <tex>4<\tex>-я потомками: if (isRed(h.left) && isRed(h.right)) colorFlip(h);
*Принудительное вращение влево: if (isRed(h.right)) h = rotateLeft(h);*Балансировка узла с <tex>4<\tex>-я потомками: if (isRed(h.left) && isRed(h.left.left)) h = rotateRight(h);   '''void''' insert( '''key''' : Key, '''value''' : Value ):
root = insert(root, key, value)
root.color = BLACK
'''Node''' insert( h : '''Node''', key : '''Key''', value : '''Value'''): '''if''' h == ''null''
'''return''' '''new''' Node(key, value)
'''if''' isRed(h.left) '''&&''' isRed(h.right) colorFlip(h) '''int''' cmp = key.compareTo(h.key) '''if''' cmp == 0 h.val = value '''else''' '''if''' cmp < 0 h.left = insert(h.left, key, value)
'''else'''
'''if''' cmp < 0
h.left = insert(h.left, key, value)
'''else'''
h.right = insert(h.right, key, value)
'''if''' isRed(h.right) '''&&''' '''!'''isRed(h.left)
h = rotateLeft(h)
'''if''' isRed(h.left) '''&&''' isRed(h.left.left)
h = rotateRight(h) '''return''' ''h''
288
правок

Навигация