После проверки кода я пришел к тому же выводу, что и вы, что корневой цвет фактически никогда не используется.
Итак, я немного протестировал, чтобы попытаться подтвердить это, и в процессе я обнаружил, что в коде, представленном в этой статье, на самом деле есть куча небольших ошибок: вызовы методов, которые никогда не определяются, присвоения переменных, которые никогда не объявляются, ненужное повторение дорогих вызовов методов, неиспользуемые ссылки на объекты (= указатели) и т. д.
Конечно, ни один из них не является очень серьезной проблемой, поскольку ни один из них не требует больших усилий для исправления; но я думаю, что ваш вопрос действительно имел бы смысл, если бы код был идеальным или почти таким, а это просто не так. Учитывая, что в коде есть десятки ошибок компиляции и несколько явно неоптимальных битов, которые не включают в себя семантику красно-черного цвета, я не думаю, что имеет смысл спорить о том, на самом деле необходимо установить цвет корневого узла семантически ожидаемым способом.
Но что бы это ни стоило, мои тесты показывают, что основной цвет действительно не имеет значения; Я написал метод проверки, который проверяет соответствующие инварианты (что ни один красный некорневой узел не имеет красного потомка, и что все конечные узлы имеют одинаковую глубину черного), и я обнаружил, что они были сохранены независимо от того, Не я закомментировал строки, чтобы установить корневой цвет на черный. (Конечно, это демонстрирует это только для случаев, которые я тестировал, но все же этого было достаточно, чтобы придать мне большую уверенность в заключении. В частности, мои случаи включали добавление ключей от 1 до 1000 по порядку, в обратном порядке или случайным образом. в порядке перемешивания, затем удаляя их по порядку, в обратном порядке или в случайном порядке. Я проверял инварианты после каждой отдельной вставки или удаления.)