家庭作业COUNT BST子树,直到找到特定的给定键(序遍历)
我需要算我通过(序)有多少子树去,直到找到指定键,
例如:如果我有一棵树,&它的inorder遍历是:1,3,7,8,9,10,11,15,20 当给定键:9,我需要返回5,当给定键:3时,我需要返回2. 我已经遍布互联网试图找到一些帮助&无法找到。
我走到这一步是:
(在“功能”是比较整数或任何特定的功能,它的工作原理)
void PRINT_KEY_ORDER(PTN TRoot, void *nkey, CMP_KEYS FUNC) // prints keys place (inorder)
{
int counter = 1;
fprintf(stdout, "%d", *(COUNT_INORDER(TRoot, nkey, FUNC, &counter))); // prints counter which is always INT
}
int* COUNT_INORDER(PTN TRoot, void *nkey, CMP_KEYS FUNC, int *counter) // counts times until reaches wanted key
{
if (TRoot != NULL)
{
COUNT_INORDER(TRoot->left, nkey, FUNC, counter);
if (FUNC(TRoot->key, nkey) == 0)
return counter;
(*counter)++;
COUNT_INORDER(TRoot->right, nkey, FUNC, counter);
}
}
此代码的工作。
计数正常,但有关行fprintf中由于某种原因崩溃,如果我用的还不止这些:如果9 3 1 7 8 20
首先,在调试器中运行。 – KevinDTimm
什么是FUNC的声明?你也有定义吗?我想你会希望''COUNT_INORDER'函数结束时返回NULL。 – Elyasin