【问题标题】:Why won't search function correctly return a pointer?为什么搜索功能不会正确返回指针?
【发布时间】:2016-11-05 17:30:31
【问题描述】:

我的代码需要一些帮助。函数 findNode 位于头文件中,并在主文件中调用。如您所见,findNode 会调用自身,直到在每个节点中找到正确的数据值。实现的树类型是通用树。 我的问题是该函数确实找到了它需要找到的 TreeNode,但它错误地返回它。 main中p的数据值为空

TreeNode<Type>* findNode(Type &_data, TreeNode<Type>* _ptr)
{

    if(_ptr->data == _data)
    {
        cout << "ptr->data: " << _ptr->showData() << endl;
        return _ptr;
    } 
    if(_ptr->children != NULL)
    {
        findNode(_data, _ptr->children->getHead());
    }
    if(_ptr->getNext() != NULL)
    {
        findNode(_data, _ptr->getNext());
    }

}


In MAIN:
.
.
        case 3:
        {
            string data;
            cout << "****************" << endl;
            cout << "***findNode()***" << endl;
            cout << "Data to find: " << endl;
            cin >> data;

            TreeNode<string>* p = Tree->findNode(data, Tree->getRoot());

            cout << "p->data = " << p->showData() << endl;

            break;
        }

【问题讨论】:

  • 尽量避免使用大写字母。

标签: templates c++11 pointers


【解决方案1】:

在 findNode(..) 前面添加“return”以解决此问题。

    if(_ptr->children != NULL)
    {
        return findNode(_data, _ptr->children->getHead());
    }
    if(_ptr->getNext() != NULL)
    {
        return findNode(_data, _ptr->getNext());
    }

除非数据第一次匹配,否则不会返回。它只是被调用,结果被释放。

在您的原始代码中,假设数据在第 4 级函数调用中匹配: findNode1->findNode2->findNode3->findNode4 然后会发生这种情况: findNode4 将 ptr 返回给 findNode3,findNode3 不返回任何内容,因为它只是调用了该函数而不期望返回任何值。

在你的技能水平上,练习“统一编码”是非常好的:

      retval = _ptr;
}
else if(_ptr->children != NULL)
{
     retval = findNode(_data, _ptr->children->getHead());
}
else if(_ptr->getNext() != NULL)
{
     retval = findNode(_data, _ptr->getNext());
}
return retval;  // return from single point.

这只是一种技术上没有更好的风格,但恕我直言,渐进式学习更好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-15
    • 2022-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多