我差不多完成了一棵红黑树,但我仍然坚持如何计算高度(不是黑色高度)。谁能给我一个关于如何实现高度的提示或概念?我知道这个公式,但这并不是一个很大的帮助。
我想过遍历每个节点并添加一个计数器,但随着红黑树的变大,这变得复杂。
基本上我怎么知道它何时走到最长的路径?
我并不真正关心解决方案的时间复杂性,但我想避免使用n 2 。
答案 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)。
希望这有帮助!