我的代码需要一些帮助。函数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;
}
答案 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渐进式学习更好。