我正在尝试实现一个从二叉树中搜索节点并返回指向找到的节点的节点指针的函数,如下所示:
template <class T>
Node<T>* BST<T>::findNode(T a,Node<T>* node)
{
cout<<node->value<<endl;
if(a == node->value)
{
return node;
}
if(a < node->value)
{
if(node->left==NULL)
{
return NULL;
}
findNode(a, node->left);
}
if(a > node->value)
{
if(node->right==NULL)
{
return NULL;
}
findNode(a, node->right);
}
}
在主程序中,我有一个指针(称为 bst)指向一个由一些节点填充的二叉搜索树实例。然后我声明了一个节点指针并调用了这样的函数:
Node <int> * n = bst-> findNode(3,bst->head);
问题:如果找不到匹配值,该函数运行良好,但是,如果找到匹配值(即转到 if(a==node ->value) block
,它将始终返回相同的值(在我的计算机中,节点 n 始终获得 0x6 的值),它是如何发生的以及如何解决?
TIA!!
最佳答案
您的递归调用实际上并未返回节点:它们需要看起来像
return findNode(a, node->left);
关于C++ 函数总是返回相同的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35743503/