找到BST的高度而不从函数返回任何内容

时间:2017-11-10 00:03:22

标签: c++ templates recursion tree

我正在尝试学习各种数据结构,我正在学习树,即二叉搜索树。除了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++;
        }
    }

我打算做一些类似于深度优先搜索的事情,因为我会增加一个图层计数器,以测试我是否在同一层,如果我是,只增加一次最大计数器。我对递归获取高度的逻辑流程有点困惑,所以我的实现几乎没有任何意义。有人能指出我正确的方向来获取有关获取高度递归函数细分的信息,或者帮助纠正我做我想做的事情的不良尝试吗?谢谢!

1 个答案:

答案 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.