सी ++ द्विआधारी खोज वृक्ष रिकर्सिव खोज समारोह

वोट
2
template <class T>
bool BST<T>::search(const T& x, int& len) const
{
    return search(BT<T>::root, x);
}


template <class T>
bool BST<T>::search(struct Node<T>*& root, const T& x)
{
   if (root == NULL)
       return false;
   else
      {
         if (root->data == x)
             return true;
         else if(root->data < x)
             search(root->left, x);
         else 
             search(root->right, x);                 
      }             
}

तो यह एक टी नोड के साथ मेरी BST वर्ग के लिए मेरे खोज समारोह है। एक्स डेटा खोजा जा के लिए पेड़ के भीतर, लेन सिर्फ नोड्स की राशि यह यदि वह मौजूद मिलान नोड साथ आने के लिए यात्रा करने के लिए है है। मैं implented नहीं किया है कि अभी तक, मैं सिर्फ संवर्द्धित मेरे काम के विकास कर रहा हूँ। मैं ऐसा करने से यह फोन कर रहा हूँ:

if(t.search(v[1], len) == true)
       cout << endl << true;

वी सिर्फ एक वेक्टर मैं से तुलना करने में बनाने के लिए किया था है, और इसलिए यह सिर्फ एक पूर्णांक के साथ की आपूर्ति कर रहा है। त्रुटि मैं हो रही है:

BST.h: In member function âbool BST<T>::search(const T&, int&) const [with T = int]â:
prog5.cc:24:   instantiated from here    
BST.h:78: error: no matching function for call to âBST<int>::search(Node<int>* const&, const int&) constâ    
BST.h:76: note: candidates are: bool BST<T>::search(const T&, int&) const [with T = int]
BST.h:83: note:                 bool BST<T>::search(Node<T>*&, const T&) [with T = int]

तो मुझे यकीन है कि मैं गलत क्या कर रही हूं या मैं गलत जहां कर रहा हूँ नहीं हूँ।

29/10/2008 को 03:44
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


3 जवाब

वोट
2

ठीक है, bool BST<T>::search(struct Node<T>*& root, const T& x)शायद स्थिरांक के बाद यह इतना पसंद होना चाहिए: bool BST<T>::search(struct Node<T>*& root, const T& x) const। मूल रूप से, आप एक स्थिरांक समारोह से एक गैर स्थिरांक समारोह कहा जाता है और यह नहीं-नहीं है।

BTW, यह मेरे लिए "संदिग्ध लग रहा है struct Node<T>*&" ... मैं शायद छोड़ चाहते हैं और और के साथ काम Node<T>*... लेकिन शायद आपको लगता है कि की वजह से जरूरत struct ?

इसके अलावा, इस सी ++ है, वहाँ एक struct के रूप में नोड छोड़ने के लिए ... के लिए की आवश्यकता होगी, कोई कारण नहीं है struct , IMHO पैरामीटर परिभाषा सिर्फ बुरा लग रहा है। क्यों नहीं नोड एक वर्ग बनाते हैं?

29/10/2008 को 03:49
का स्रोत उपयोगकर्ता

वोट
0

कलन विधि :

  1. नोड मान डेटा ले लो;
  2. चरण 3 दोहराएं कदम 5 जब तक हम मान निकालने या हम पेड़ से परे जाना।
  3. यदि डेटा नोड मूल्य जड़ के बराबर है, खोज सफल रहा है और कलन विधि को समाप्त।
  4. यदि डेटा रूट नोड मूल्य से कम है, तो हम छोड़ दिया उप पेड़ खोज करने के लिए की है।
  5. वरना डेटा रूट नोड मूल्य से कम है, तो हम छोड़ दिया उप पेड़ खोज करने के लिए की है।
  6. आउटपुट प्रिंट संदेश "मिले" या "नहीं मिला"।

सी ++ कार्यान्वयन

    node* search(node* root, int data)
    {
     if (root==NULL || root->data==data) return root;

     if (root->data < data)   return search(root->right, data);

     return search(root->left, data);
   }
05/10/2016 को 18:30
का स्रोत उपयोगकर्ता

वोट
1

आपकी खोज के कोड में कई समस्याएं हैं:

  • यदि नोड डेटा कम से कम तुम क्या खोजते हैं, तो आप सही शाखा, नहीं बाईं शाखा में खोज करनी चाहिए है सॉर्ट क्रम, पीछे की ओर है।

  • आप पुनरावर्ती कॉल का परिणाम वापस आ जाएगी

  • यह कारण है कि आप पारित भी स्पष्ट नहीं है rootसंदर्भ द्वारा। यह बजाय एक के रूप में पारित किया जाना चाहिए constयोग्य सूचक और विधि शरीर की जानी चाहिए constभी प्रवेश पा लिया।

यहाँ एक विकल्प है:

template <class T>
bool BST<T>::search(const struct Node<T> *root, const T& x) const {
    if (root == NULL)
        return false;
    else
    if (root->data == x)
        return true;
    else
    if (root->data < x)
        return search(root->right, x);
    else 
        return search(root->left, x);
}

और यहाँ एक सरल गैर पुनरावर्ती दिया गया है:

template <class T>
bool BST<T>::search(const struct Node<T> *root, const T& x) const {
    while (root != NULL) {
        if (root->data == x)
            return true;
        if (root->data < x)
            root = root->right;
        else 
            root = root->left;
    }
    return false;
}
31/10/2016 को 20:18
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more