我无法弄清楚这是如何工作的,在我的脑海中,一旦得到答案它就不会对它做任何事情。
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);
}
}
}
答案 0 :(得分:10)
没有。它应该是:
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
子句。
编辑 - 总结以下评论:您发布的代码可能正常工作的唯一原因是编译器实现细节和测试数据的奇怪组合对您有利。你绝对应该解决问题,而不是保持代码的原样。
答案 1 :(得分:0)
这假设FindNode在第一场比赛时返回。
Node* FindNode(Node *rootNode, int data)
{
Node *ptr;
if (!rootNode)
return NULL;
else
{
if (rootNode->data == data)
return rootNode;
else
{
ptr = NULL;
// if either left or right child is there
if(rootNode->left || rootNode->right)
{
// if not found in left subtree
if(NULL == (ptr = FindNode(rootNode->left, data))){
// check in right subtree
ptr = FindNode(rootNode->right, data);
}
}
return ptr;
}
}
}