c++ - 这个递归函数如何工作?

标签 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);
   }
  }  
 }

最佳答案

事实并非如此。应该是:

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/

相关文章:

c++ - 将修改后的矩阵中的所有数字相加

c - C 中的递归例程反向打印字符串

algorithm - 二叉树的排列

c++ - 将一个信号连接到两个插槽,但在 Qt 中一次只执行一个插槽

c++ - 静态成员变量在哪个状态下持有值 '0'?

python - 回溯时如何存储递归结果?

java - java中的深度 copy-and-swap 子树

java - 二叉树的直径 - 更好的设计

c++ - 如何在保留布局功能的同时将两个小部件层叠在一起?

python - 使用递归组合字典中的值