2013-11-17 3 views
0

Я почти закончил реализацию красного черного дерева, но я застрял с , как рассчитать высоту (не черный высота). Может ли кто-нибудь дать мне подсказку или концепцию о том, как реализовать высоту? Я знаю формулу, но это не очень помогает.Как рассчитать высоту красного черного дерева?

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

В основном, как я узнаю, когда он прошел до самого длинного пути?

Я не очень беспокоюсь о временной сложности решения, но я бы хотел избежать n .

+0

Я не думаю, что есть способ узнать «истинную» высоту без явного отслеживания или DFSing. Черная высота действительно все это важно. Я бы предположил, что худший случай «истинный» рост ((2 * черная высота) -1), так как корень и листья должны быть черными, и у каждого красного родителя должно быть два черных ребенка. – Justin

ответ

0

Существует простой рекурсивный подход для вычисления высоты дерева, который работает во времени O (n), где n - количество узлов. Идея состоит в том, чтобы вычислить высоту каждого дочернего узла, а затем взять максимум этих значений, плюс один. Вот некоторые псевдокод:

function treeHeight(node n) { 
    if (n is null) return -1; 
    return max(treeHeight(n.left), treeHeight(n.right)) + 1; 
} 

Это посещает каждый узел только один раз и делает O (1) работу на узел, таким образом, общая сложность времени O (п).

Надеюсь, это поможет!

+0

Как бы вы взяли максимум этих значений? Ну, я имею в виду, что вы можете сравнить его, но как вы знаете, когда сравнивать и с чем сравнивать, и такие – user2472706

+0

@ user2472706- Я не уверен, что понимаю ваш вопрос. Вы спрашиваете, как вычислить максимум два значения? – templatetypedef

+0

Извините, я перефразирую его. Что было бы максимальным от вашего псевдокода с точки зрения реализации? – user2472706

Смежные вопросы