c++ - 函数,用于返回特定级别的二叉搜索树中的节点数

标签 c++

我必须创建一个函数getNodesatLevel,该函数返回某个级别的节点数,但是,我收到“可能到达void函数的结尾”错误。这是用于二叉搜索树,我需要对此函数使用递归。

int TreeType::getNodesAtLevel(TreeNode * &node, int level, ItemType * mainArr)
{
    int currentLevel = 0;
    int NodeCount = 1;

    if(currentLevel == level)
    {
        NodeCount++;
        return NodeCount;
    }
    else if(currentLevel != level)
    {
        currentLevel++;

        if(node->left != NULL)
            getNodesAtLevel(node->left, level, mainArr);

        if(node->right != NULL)
            getNodesAtLevel(node->right, level, mainArr);
    }
}

最佳答案

该错误基本上就是它的提示:您的函数可以到达结尾而无需返回值。

要了解原因,让我们来看一下外部if语句:

if(node->left != NULL)
    //...
if(node->right != NULL)
    //...
//...

如果node->leftnode->right都为空,会发生什么?您根本不处理这种情况。那是一个错误。

其次(可能是最重要的),您递归地调用自己,但是对函数的返回值不做任何事情。您不返回它,也不将其保存以备后用。这意味着什么都没有发生。它只是迷路了。

因此,您的函数根本不会返回该值。这会导致没有返回的情况。

因此,要解决此问题,请弄清楚您要使用函数的递归返回值做什么,然后a)将其保存在临时变量中,或b)简单地将其返回。您选择哪一个取决于您要对功能进行计数。

另外,即使树的两边均为NULL,也请确保返回一个值。

关于c++ - 函数,用于返回特定级别的二叉搜索树中的节点数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59186289/

相关文章:

c++ - 误解重复指令 - 它应该失败,但没有

c++ - 计算创建的类对象

c++ - 模板中定义的类型用于定义类的模板方法

c++ - C++11/C++14 中的自动和大括号初始化

c++ - std::map 不接受我的运算符<

c++ - 在这种情况下,我应该/如何避免垂头丧气?

c++ - Media Foundation 错误地将静止图像捕获流描述符标记为视频捕获

c++ - 初始化基本类型时哪个更有效?

c++ - 即使在初始化结果参数后,CUDA atomicAdd 也会产生错误的结果

C++ 不允许我比较指针和 int