Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.12.2010, 07:57   #1
Mixim
Форумчанин
 
Регистрация: 29.10.2009
Сообщений: 259
Вопрос Красно-черное дерево(RB-Tree)

Имеется необходимость реализовать на C++ красно-черное дерево<RB-Tree>(аналог бинарного дерева поиска, только на порядок лучше). Красно-черное дерево - это аналог 2-3-4-дерева. Реализую метод для вставки элемента в это дерево, получаю код:
Код:
template <class T>
void TRBTree<T> :: InsertToNodeRBTree(TRBTreeNode<T> *aNode, TRBTreeNode<T>* aRoot)
  {
    if (aNode->Get_Value() < aRoot->Get_Value())
      {
        if (aRoot->_LeftChild == NULL)
                aRoot->_LeftChild = aNode;
        else
                InsertToNodeRBTree(aNode, aRoot->_LeftChild);
      }
    else
        if (aRoot->_RightChild == NULL)
                aRoot->_RightChild = aNode;
        else
                InsertToNodeRBTree(aNode, aRoot->_RightChild);

    aNode->_Parent = aRoot;
  }

template <class T>
void TRBTree<T> :: InsertNodeRBTree(TRBTreeNode<T>* aNode)
  {
    if (aNode == NULL)
        throw TArgumentNULLException();
    else
       if (_Root == NULL)
                _Root = aNode;
       else InsertToNodeRBTree(aNode, _Root);
  }
_Root - корень RB-дерева. В данных методах необходимо, при нарушении свойств RB-дерева, осуществлять "поворот влево", либо "поворот вправо", а также изменять цвет узлов и с вот этим возникают большие проблемы...
Ни могли бы Вы подсказать, каким образом необходимо выполнять требуемые "повороты", в каких случаях это необходимо делать? Если кто-то может, то прошу пошагово показать вставку элементов в RB-дерево. Имеется пример вставки элементов в RB-дерево из лекции, но по-моему либо я криво зарисовывал RB-деревья, либо лекция прочитана не совсем корректно, в связи с чем в имеющихся деревьях, помоему, нарушаются некоторые свойства RB-дерева
Из всех классических книг, посвященных программированию, ненавижу всего одну - русский перевод книги Роберта Седжвика-"Фундаментальные алгоритмы C++". Предпочитаю читать её в оригинале.
Mixim вне форума Ответить с цитированием
Старый 26.12.2010, 16:58   #2
still_alive
Great Code Monkey
Форумчанин
 
Аватар для still_alive
 
Регистрация: 09.08.2007
Сообщений: 533
По умолчанию

Читайте Кормена.
Или наслаждайтесь этим
still_alive вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Красно-черные деревья Lullu Помощь студентам 0 25.04.2010 14:53
Binar Tree cppta Общие вопросы C/C++ 0 14.10.2009 14:17
Помогите с решением задачи или объясните, Красно-чёрные деревья тема Kambyz Паскаль, Turbo Pascal, PascalABC.NET 3 22.12.2008 16:08
Удаление в tree Черничный Общие вопросы Delphi 2 24.05.2008 10:43