簡體   English   中英

C ++函數始終返回相同的指針

[英]C++ Function always returns the same pointer

我正在嘗試實現一個從二叉樹中搜索節點並返回指向所找到節點的Node指針的功能,如下所示:

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指針,並像下面這樣調用了函數:

    Node <int> * n = bst-> findNode(3,bst->head);

問題:如果找不到匹配的值,該函數會很好地工作,但是,如果找到匹配的值(即,通過if(a==node->value) block ,它將始終返回相同的值(在我的計算機中,節點n始終獲得0x6的值),它是如何發生的以及如何解決的?

TIA!

您的遞歸調用實際上並沒有返回節點:它們需要看起來像

return findNode(a, node->left);

該函數僅對條件具有返回語句

if(a == node->value)
{
    return node;
}

或者像這樣的情況

if(node->left==NULL)
{
  return NULL;
}

在所有其他情況下,該函數具有未定義的行為。

同樣在函數開頭的這個語句

cout<<node->value<<endl;

以及上面顯示的條件是錯誤的,因為通常node可以等於nullptr

我將通過以下方式編寫函數

template <class T>
Node<T>* BST<T>::findNode( Node<T> *node, const T &value )
                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
{
    if ( node == nullptr || node->value == value )
    {
        return node;
    }
    else if ( node->value < value )
    {
        return findNode( node->right, value );
    }
    else
    {
        return findNode( node->left, value );
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM