如何计算红黑树的高度?

时间:2013-11-17 22:38:14

标签: data-structures binary-search-tree red-black-tree

我差不多完成了一棵红黑树,但我仍然坚持如何计算高度不是黑色高度)。谁能给我一个关于如何实现高度的提示或概念?我知道这个公式,但这并不是一个很大的帮助。

我想过遍历每个节点并添加一个计数器,但随着红黑树的变大,这变得复杂。

基本上我怎么知道它何时走到最长的路径?

我并不真正关心解决方案的时间复杂性,但我想避免使用n 2

1 个答案:

答案 0 :(得分: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(n)。

希望这有帮助!