我必须创建一个函数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->left
和node->right
都为空,会发生什么?您根本不处理这种情况。那是一个错误。其次(可能是最重要的),您递归地调用自己,但是对函数的返回值不做任何事情。您不返回它,也不将其保存以备后用。这意味着什么都没有发生。它只是迷路了。
因此,您的函数根本不会返回该值。这会导致没有返回的情况。
因此,要解决此问题,请弄清楚您要使用函数的递归返回值做什么,然后a)将其保存在临时变量中,或b)简单地将其返回。您选择哪一个取决于您要对功能进行计数。
另外,即使树的两边均为NULL,也请确保返回一个值。
关于c++ - 函数,用于返回特定级别的二叉搜索树中的节点数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59186289/