这个递归函数如何工作?

fau*_*der 0 c++ recursion binary-tree

我无法弄清楚这是如何工作的,在我看来,一旦得到答案,它就不会对它做任何事情.

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);
   }
  }  
 }
Run Code Online (Sandbox Code Playgroud)

Dav*_*vid 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);
    }
 }
Run Code Online (Sandbox Code Playgroud)

注意额外的return语句和extra else if子句.

编辑 - 总结以下评论:您发布的代码可能正常工作的唯一原因是编译器实现细节和测试数据的奇怪组合对您有利.你应该肯定解决问题而不是保持代码的样子.

  • 您假设树已订购.问题没有具体说明. (3认同)