نمایش نتایج 1 تا 2 از 2

نام تاپیک: تشکیل درخت

  1. #1
    کاربر جدید
    تاریخ عضویت
    خرداد 1388
    محل زندگی
    زیر سایه حق
    پست
    16

    تشکیل درخت

    سلام بچه ها خسته نباشید
    یه راهنمایی می خواستم در مورد تشکیل درخت برای یک عبارت اینفیکس
    یه چیزایی نوشتم
    #
    include<iostream.h>
    #include<conio.h>
    template<class type>
    class BTree;
    template<class type>
    class BNode
    {
    friend class BTree;
    friend class Stack;
    private:
    type data;
    BNode* lchild;
    BNode* rchild;
    enum opr ['(','+','-','/','*','%','||','&&','!'];
    };
    template<class type>
    class Stack
    {
    private:
    BNode* top;
    public:
    stack()
    {
    top->lchild=top->rchild=NULL;
    }
    int empty()
    {
    if(top==NULL) return 1;
    else
    return 0;
    }
    void push(BNode*);
    void pop(BNode*);
    };
    template<class type>
    class BTree
    {
    private:
    BNode<char>*root;
    public:
    BTree()
    {
    root=NULL;
    }
    void INSERT(BNode<char>*);
    char operand();
    BNode olaviat(BNode<char>*,BNode<char>*);
    void maketree();
    void preorder(BNode*);
    void postorder(BNode*);
    void Display();
    };
    //int menu();
    //////////////////////////////////////////////////////
    void BTree<type>::INSERT(BNode<char>*p)
    {

    clrscr();
    cout<<"\n\n";
    while(1)
    {
    cout<<" PLEAS ENTER A EXPRESION\n";
    gets(p);
    maketree(p);
    }
    }
    //************************************************** *****
    void BTree<type>::maketree(BNode<char>*T)
    {
    BNode<char>* p,q,r;
    T=root;
    r=new BNode;
    r->lchild=r->rchild=NULL;
    r->data=p;
    if(root==NULL)
    root=r;
    while(T!=NULL)
    {
    r=olaviat(p,q)
    if(T->rchild!=NULL)
    T=T->rchild;
    else
    {
    T->rchild=r;
    break;
    }
    if(T->lchild!=NULL)
    T=T->lchild;
    else
    {
    T->lchild=r;
    break;
    }

    }

    }
    ///////////////////////////////////////////////////
    void BTree<type>::preorder(BNode<char>* p)
    {
    stack<BNode*> s;
    BNode<char>* q;
    while(1)
    {
    while(p)
    {
    cout<<p->data;
    s.push(p);
    }
    if(!s.empty())
    {
    p=*pop(p);
    p=olaviat(p,q);
    p=p->lchild;
    }
    else
    break;
    }
    }
    /////////////////////////////////////////////////
    void Stack<type>::push(BNode<char>* p)
    {
    p=newBNode;
    if(!empty())
    {
    cout<<"STACK IS FULL...\n";
    getch();
    exit(0);
    }
    else{
    p->rchild=top;
    p->lchild=NULL;
    top=p;
    }
    /* top=top->lchild;
    top=top->rchild; */
    }
    //************************************************** ***
    void Stack<type>::pop(BNode<char>* p)
    {
    if(empty())
    {
    cout<<"STACK IS EMPTY...\n";
    getch();
    exit(0);
    }
    else
    {
    p=top->rchild;
    top=top->rchild;
    top=top->lchild;
    delet p;
    }
    }
    //************************************************** *****
    char BTree<type>::operand(BNode<char>* p)
    {
    int f=0;
    clrscr();
    cout<<"\n\n";
    for(int i=0;p->data[i];i++)
    {
    if(p->data[i]>='A' && p->data[i]<='Z')
    {
    f=1;
    cout<<p->data[i];
    }
    else
    s.push(p->data[i]);
    }
    return 0;
    }
    ///////////////////////////////////////////////////////////
    //************************************************** ****
    BNode BTree<type>::olaviat(BNode<char>op1,BNode<char>op2 )
    {

    if(!s.empty())
    {
    op2=* s.pop(op1);
    op1=op1->rchild;
    if(op2=='(')
    while(op2!=')')
    {
    if((op2.opr<op1.opr)||op2.opr==op1.opr))
    return op1;
    } }
    }
    //////////////////////////////////////////////////////////////////
    void BTree<type>::Display()
    {

    while(p)
    {
    cout<<p->data;
    p=p->lchild;

    آخرین ویرایش به وسیله whitehat : سه شنبه 25 خرداد 1389 در 15:42 عصر دلیل: از تگ مناسب استفاده کنید

  2. #2

    Unhappy نقل قول: تشکیل درخت

    از برنامه ممنون ولی درخط 56 void BTree<type>::INSERT( BNode<char>*p) مشکل داره وخطای type name expectedرو میده اگه میشه راهنمایی کنین

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •