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