Довольно легко понять стандартное двоичное дерево поиска и его операции. Из-за этого понимания мне даже не нужно запоминать реализации этих операций вставки, удаления, поиска.
Сейчас я изучаю Red-Black Tree, и я понимаю его свойства для сохранения сбалансированного дерева. Однако мне очень трудно понять его процедуры вставки и удаления.
Я понимаю, что при вставке нового node мы отмечаем node как красный (потому что красный - это лучшее, что мы можем сделать, чтобы не нарушать красно-черные законы дерева). Новый красный node может по-прежнему нарушать "закон непрерывных красных узлов". Затем мы фиксируем его через:
-
проверьте цвет его дяди, если красный, затем пометьте его родителя и дядюшку как черный и перейдите к бабушке и дедушке.
-
если это правильный дочерний элемент, левый поворот его родительского
-
Отметьте его родительский цвет как черный, а его дед и бабушка - красным, а затем верните его прародителя.
сделано (в основном, как указано выше).
Во многих местах описывается вставка красного-черного дерева, как указано выше. Они просто расскажут вам, как это сделать. Но почему эти шаги могут исправить дерево? Почему сначала левое вращение, а затем правое вращение?
Может ли кто-нибудь объяснить, почему мне более понятно, еще более ясно, чем CLRS? Какая магия вращения?
Я действительно хочу понять, что через 1 год я смогу реализовать дерево Red-Black самостоятельно, не просматривая книгу.
Спасибо