我正在尝试学习各种数据结构,我正在学习树,即二叉搜索树。除了get height函数之外,我已经完成了大部分功能。我发现了很多伪代码,如何递归地写这个,并返回递归路径来找到高度。这就是我想出的:
int getHeight(struct node* node)
{
if (node == nullptr)
return 0;
else
{
int leftDepth = getHeight(node->left);
int rightDepth = getHeight(node->right);
if (leftDepth > rightDepth)
return(leftDepth+1);
else return(rightDepth+1);
}
}
这很好,但我希望与我写出其他功能的方式保持一致。其他函数是模板,每个模板都有一个在驱动程序中调用的公共包装函数。然后,此包装器调用实际执行预期操作的私有函数。所以,我得到的高度是:
template <typename T>
int binarySearch<T>::getHeight()
{
int height = 0;
getHeight(rootNode, height, 0);
return height;
}
template <typename T>
void binarySearch<T>::getHeight(Node *node, int &max, int layer)
{
int tempRight = 0;
int tempLeft = 0;
if (node == nullptr)
{
tempRight = -1;
tempLeft = -1;
max--;
}
else
{
if (node->left != nullptr)
{
tempLeft = 1;
getHeight(node->left, max, layer);
}
if (node->right != nullptr)
{
tempRight = 1;
getHeight(node->right, max, layer);
}
}
if (tempLeft > tempRight)
{
max++;
}
else
{
max++;
}
}
我打算做一些类似于深度优先搜索的事情,因为我会增加一个图层计数器,以测试我是否在同一层,如果我是,只增加一次最大计数器。我对递归获取高度的逻辑流程有点困惑,所以我的实现几乎没有任何意义。有人能指出我正确的方向来获取有关获取高度递归函数细分的信息,或者帮助纠正我做我想做的事情的不良尝试吗?谢谢!
答案 0 :(得分:0)
我不确定,你想要实现什么,但这里有一个镜头:
void getHeight(struct node* node, int &max, int layer) {
if (!node) return;
if (layer>max) {
max = layer;
}
getHeight(node->left, max, layer+1);
getHeight(node->right, max, layer+1);
}
在调用max
之前,您需要将getHeight
初始化为0.