Преобразование дерева 2-3-4 в красное черное дерево

Я пытаюсь преобразовать дерево 2-3-4 в дерево Red-Black в java, но мне трудно понять его.

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

public class TwoThreeFour<K> {
    public List<K> keys;
    public List<TwoThreeFour<K>> children;
}

public class RedBlack<K> {
    public K key;
    public boolean isBlack;
    public RedBlack<K> left,right;
    public RedBlack<K key, boolean isBlack, RedBlack<K> left, RedBlack<K> right){
        this.key = key; this.isBlack = isBlack; this.left = left; this.right = right;
    }
}

Я предполагаю, что дерево 2-3-4 является допустимым и хочет вернуть красное черное дерево при вызове метода.

Я также пробовал следующий код без везения:

public convert(TwoThreeFour<K> tTF){
    if (ttf.keys.size() == 3)
        RedBlack<K> node = RedBlack<ttf.keys[1], true, RedBlack<ttf.keys[0], false, /* not sure what to put here for left */, /* not sure what to put here for right */), RedBlack<ttf.keys[2], false, /* not sure what to put here for left */, /* not sure what to put here for right */)

и т.д.. для keys.size() == 2, 1....

Я знаю, что он должен быть рекурсивным в теории, но мне трудно понять его. Любые мысли?

4
задан user3745602 12 марта '16 в 11:05
источник поделиться
1 ответ

Рассмотрим эти три правила:

  • Преобразуйте любой 2- node в дерево 2-3-4 в черный node в красно-черное дерево. введите описание изображения здесь
  • Преобразуйте любой 3- node в дочерний элемент node и родительский node. у ребенка node есть два собственных ребенка: либо W, либо X, либо X и Y. У родителя есть еще один ребенок: либо Y, либо W. Это не имеет значения какой элемент становится дочерним и который является родителем. Ребенок цветной красный, а родитель окрашен в черный цвет. введите описание изображения здесь
  • Преобразуйте любой 4- node в родителя и двух детей, первый у ребенка есть свои дети W и X; у второго ребенка есть дети Y и Z. Как и раньше, дети окрашены в красный цвет, а родительский черный. введите описание изображения здесь

Красно-черные правила автоматически выполняются, если вы следуете этим правилам. Здесь результирующее дерево примеров после применения преобразований. введите описание изображения здесь

Надеюсь, это должно вас заставить. Для удобства понимания и подробного объяснения вы можете обратиться к книге Robert Lafore Data Structures.

5
ответ дан Yogesh Umesh Vaity 28 марта '16 в 10:22
источник поделиться

Другие вопросы по меткам