Data structures 如何计算红黑树的高度?

Data structures 如何计算红黑树的高度?,data-structures,binary-search-tree,red-black-tree,Data Structures,Binary Search Tree,Red Black Tree,我几乎完成了红黑树的实现,但我一直在思考如何计算高度(而不是黑色高度)。有谁能给我一个关于如何实施高度的提示或概念吗?我知道这个公式,但帮不了什么忙 我想过遍历每个节点并添加一个计数器,但随着红黑树的变大,这会变得复杂 基本上我怎么知道它什么时候走到了最长的路径 我并不真正关心解决方案的时间复杂性,但我希望避免使用n2。有一种简单的递归方法来计算时间为O(n)的树的高度,其中n是节点数。其思想是计算每个节点的子节点的高度,然后取这些值的最大值加上一。下面是一些伪代码: function tree

我几乎完成了红黑树的实现,但我一直在思考如何计算高度(而不是黑色高度)。有谁能给我一个关于如何实施高度的提示或概念吗?我知道这个公式,但帮不了什么忙

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

基本上我怎么知道它什么时候走到了最长的路径


我并不真正关心解决方案的时间复杂性,但我希望避免使用n2。

有一种简单的递归方法来计算时间为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)


希望这有帮助

我不认为有一种方法可以知道“真实”高度,而不明确地跟踪或确定它。黑色的高度才是最重要的。我假设最坏情况下的“真实”高度是((2*black height)-1),因为根和叶必须是黑色的,每个红色的父代必须有两个黑色的子代。您如何获得这些值的最大值?我的意思是你可以比较,但是你怎么知道什么时候比较,什么时候比较,什么时候比较such@user2472706-我不确定我是否理解你的问题。你是在问如何计算两个值中的最大值吗?对不起,我将重新措辞。就实现而言,伪代码的最大值是多少?@user2472706-类似于“如果x