在我看来,我无法弄清楚这是如何工作的,一旦它得到答案,它就不会对它做任何事情。
Node* FindNode(Node *rootNode, int data)
{
if (!rootNode)
return NULL;
else
{
if (rootNode->data == data)
return rootNode;
else
{
FindNode(rootNode->left, data);
FindNode(rootNode->right, data);
}
}
}
最佳答案
事实并非如此。应该是:
Node* FindNode(Node *rootNode, int data) {
if (!rootNode) {
return NULL;
}else if (rootNode->data == data) {
return rootNode;
}else if (data < rootNode->data) {
return FindNode(rootNode->left, data);
}else{
return FindNode(rootNode->right, data);
}
}
注意额外的 return 语句和额外的 else if
子句。
编辑 — 总结以下评论:您发布的代码可能有效的唯一原因是编译器实现细节和测试数据的奇怪组合是否对您有利。您绝对应该解决问题,而不是保持代码原样。
关于c++ - 这个递归函数如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3473938/