द्विआधारी खोज वृक्ष में अजीब त्रुटि

वोट
-3
#include <iostream>
using namespace std;
#define YES 1
#define NO 0

class tree
{
    private:

    public:
        struct leaf
        {
            int data;
            leaf *l;
            leaf *r;
        };
        struct leaf *p;
        tree();
        ~tree();
        void destruct(leaf *q);
        tree(tree& a);
        void add(int n);
        void transverse();
        void in(leaf *q);
        void pre(leaf *q);
        void post(leaf *q);
        leaf*  createBST(int *preOrder, int* inOrder, int len);     
};      
tree::tree()
{
    p=NULL;
}
tree::~tree()
{
    destruct(p);
}
void tree::destruct(leaf *q)
{

}

void tree::transverse()
{
    int c;
    cout<<\n1.InOrder\n2.Preorder\n3.Postorder\nChoice: ;
    cin>>c;
    switch(c)
    {
        case 1:
            in(p);
            break;

        case 2:
            pre(p);
            break;

        case 3:
            post(p);
            break;
    }
}
void tree::in(leaf *q)
{
    if(q!=NULL)
    {
        in(q->l);
        cout<<\t<<q->data<<endl;
        in(q->r);
    }

}
void tree::pre(leaf *q)
{
    if(q!=NULL)
    {
        cout<<\t<<q->data<<endl;
        pre(q->l);
        pre(q->r);
    }

}
void tree::post(leaf *q)
{
    if(q!=NULL)
    {
        post(q->l);
        post(q->r);
        cout<<\t<<q->data<<endl;
    }

}



tree::leaf* tree::createBST(int *preOrder, int* inOrder, int len)
{
    int i;
    tree::leaf *bst = new tree::leaf;
//  tree bst;
//  if(len < 0)
//      {//bst = NULL;
//      return bst;}

    bst->data = *preOrder;
    for(i = 0; i < len; i++)
        if(*(inOrder + i) == *preOrder)
        break;
    if(i>=0)    
        bst->l = createBST(preOrder + 1, inOrder, i);
    if((len-i-1) >=0)
        bst->r = createBST(preOrder + i +1, inOrder + i + 1, len-i-1);
    return bst;

}

int main()
{


    tree bst;
    int pre_data[] = {20,8,4,12,10,14,22};
    int in_data[] = {4,8,10,12,14,20,22};
    bst.p = bst.createBST(pre_data, in_data, 7);
    bst.transverse();

    return 0;
}

मुख्य समस्या यह समारोह में है

  tree::leaf* tree::createBST(int *preOrder, int* inOrder, int len)

नोट: मैं इस बारे में दो प्रश्न पोस्ट किया है। क्योंकि मैं अपने कोड को संशोधित एक बहुत मैं एक ताजा पोस्ट शुरू कर दिया।

20/03/2011 को 23:47
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


1 जवाब

वोट
2

मेरा मानना है कि त्रुटि आप अपने प्रत्यावर्तन के लिए कोई समाप्त हालत है कि है। इस मामले में जहां पर विचार करें len == 0, तो आप कोड की इस पंक्ति पर अमल होगा:

bst->l = createBST(preOrder + 1, inOrder, i);

यह 0 की लंबाई में पारित करेंगे और एक ही बात फिर से नहीं होगा। यह अनंत प्रत्यावर्तन है, और एक विभाजन गलती का कारण होगा।

मुझे लगता है कि तुम्हारी समस्या की शुरुआत करने के लिए इस जोड़कर हल किया जाता है createBST:

if(len == 0)
    return NULL;
21/03/2011 को 00:06
का स्रोत उपयोगकर्ता

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