Добавление пустых листовых вершин в дерево AVL?

Мне было интересно, всегда ли можно добавить пустые листовые вершины в сбалансированное дерево AVL, а затем раскрасить все вершины так, чтобы было правильно структурированное красно-черное дерево?


person user3325924    schedule 22.02.2014    source источник


Ответы (1)


Очень хороший вопрос. Я думаю, что да. Следующее не является полным доказательством, но я думаю, что оно указывает на то, что ответ может быть верным. Наихудшим сбалансированным деревом AVL является дерево Фибоначчи, определяемое следующим образом:

fib(0) = EmptyLeaf()
fib(1) = Node(fib(0), fib(0))
fib(n) = Node(Fib(n-1), Fib(n-2))

Это с точностью до перестановки левого и правого дочерних элементов уникальное дерево глубины n с наименьшим количеством узлов. См. например

Fib(5)

В таком дереве вы решаете рекурсивно раскрасить узел по следующим правилам.

1 - Root is black
2 - for each node n if parent_color is black and n is left child 
    then color = red
    else color = black

Тогда это красно-черное дерево. См., например (спасибо этому апплету):

Fib красный черный

Также внизу этой страницы есть примечание, указывающее на то же самое.

person hivert    schedule 22.02.2014