我尝试在二叉搜索树中搜索具有特定值的树节点。
所以我使用了递归,但效果并不好。
我想知道这个功能出了什么问题。
有人说我应该在调用函数本身时返回该函数。
它确实有效,但我不明白为什么。有人可以向我解释
递归是如何工作的以及如果返回类型为void怎么办?
谢谢!
typedef struct node
{
struct node* left;
struct node* right;
int val;
}treeNode;
int searchTree(treeNode *T, int key, treeNode *T1, treeNode** p)
{
if(!T)
{
*p=T1;
return 0;
}
else if(T->val==key)
{
*p=T;
return 1;
}
else if(T->val<key)
{
searchTree(T->right,key,T,p);
}
else
{
searchTree(T->left,key,T,p);
}
return 1;
}
最佳答案
您错过了返回递归调用的值
如果您需要进行递归调用,这并非没有意义;-)
int searchTree(treeNode *T, int key, treeNode *T1, treeNode** p)
{
if(!T)
{
*p=T1;
return 0;
}
else if(T->val==key)
{
*p=T;
return 1;
}
else if(T->val<key)
{
return searchTree(T->right,key,T,p);
}
else
{
return searchTree(T->left,key,T,p);
}
}
请注意,由于递归是终端,编译器可以将其删除并生成循环......您也可以自己执行此操作;-)
关于c - C中的递归有什么问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55497769/