【发布时间】:2013-12-08 21:35:58
【问题描述】:
我有以下方法来获取红黑树的高度,这很有效(我发送根)。现在我的问题是,这是如何工作的?我已经画了一棵树,并尝试为每个递归调用一步一步地执行此操作,但我无法将其拉下来。 我知道代码在做什么的一般概念,它正在遍历所有叶子并比较它们,但是任何人都可以对此给出明确的解释吗?
int RedBlackTree::heightHelper(Node * n) const{
if ( n == NULL ){
return -1;
}
else{
return max(heightHelper(n->left), heightHelper(n->right)) + 1;
}
}
int RedBlackTree::max(int x, int y) const{
if (x >= y){
return x;
}
else{
return y;
}
}
【问题讨论】:
-
想想你看到的
+ 1挂在递归调用结果的末尾,以及它对 当前 调用的调用者的贡献。 -
首先尝试用非常简单的树来模拟算法的工作。如果只有根存在,它是如何工作的?它在具有树节点的树中如何工作?
-
您似乎不知道,您不必像
std::max那样创建自己的max函数。
标签: c++ recursion red-black-tree