为什么搜索功能不正确返回指针?

时间:2016-07-04 04:30:13

标签: templates c++11 pointers

我的代码需要一些帮助。函数findNode位于头文件中,并在main中调用。如您所见,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;
        }

1 个答案:

答案 0 :(得分:1)

在findNode(..)前加上“return”来解决问题。

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

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

在原始代码中,假设数据在第4级函数调用中匹配: findNode1-&GT; findNode2-&GT; findNode3-&GT; findNode4 那么这发生了: findNode4将ptr返回给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.

这仅仅是一种在技术上不是更好的风格,但是imho渐进式学习更好。