Шаг 162.
Основы языка Haskell.... Удаление узла из красно-чёрного дерева. Корректировка свойств красно-чёрного дерева после удаления узла (окончание)

    На этом шаге мы закончим изучение этого вопроса.

    4. Ситуация "чёрный брат с чёрным и красным племянниками".

    (а) C - левый потомок D, Nl - чёрный узел, Nr - красный узел:

    Исправим нарушение свойства чёрного узла:

    (б) зеркальное отражение случая (а): C - правый потомок D, Nl - красный узел, Nr - чёрный узел:

    Исправим нарушение свойства чёрного узла:

    В рассмотренных случаях (а) и (б) свойство красного узла выполняется, т.к. не было введено никаких новых красных узлов.

    Свойство чёрного узла также выполняется, т.к. все пути, проходящие через нарушающий узел, содержат теперь дополнительный чёрный узел. Пути, проходящие через дочерние деревья племянника, который был окрашен в красный цвет, содержат то же количество чёрных узлов, что и ранее.

    Следовательно, во всех случаях свойство чёрного узла выполняется, и результирующее дерево является красно-чёрным.

    (в) C - левый потомок D, Nl - красный узел, Nr - чёрный узел:

    Исправим нарушение свойства чёрного узла:

    (г)  зеркальное отражение случая (в): C - правый потомок D, Nl - чёрный узел, Nr - красный узел:

    Исправим нарушение свойства чёрного узла:

    В рассмотренных случаях (в) и (г) свойство красного узла выполняется, т.к. не было введено новых красных узлов.

    Свойство чёрного узла также выполняется, т.к. все пути, проходящие через нарушающий узел, содержат дополнительный чёрный узел.

    Пути, проходящие через дочерние деревья племянника, который был окрашен в красный цвет, содержат то же количество чёрных узлов, что и ранее.

    Следовательно, во всех случаях свойство чёрного узла выполняется, и результирующее дерево является красно-чёрным.


   Замечание (важное). Если нарушающий узел удаётся переместить до позиции корневого узла, создаётся предельная ситуация. В этом случае нарушающий узел не имеет родительского узла и, следовательно, не может иметь братский узел. При этом нарушающий узел больше не представляет проблемы.

    На следующем шаге мы приведем рассмотренный алгоритм на псевдокоде.




Предыдущий шаг Содержание Следующий шаг