树的层序遍历,以及层序建树

#include<iostream>
using namespace std;



    typedef class tree
        {
            public :
                int date;
                tree *left;
                tree *right;
        }*BTree,btree;

    typedef class qnode
        {
            public :
                BTree p;
                qnode *next;
        }*Qnode,qnode;

    typedef class Queue
        {
            public :
          Qnode fronts;
          Qnode rear;
        }*Squeue,squeue;
     void creat_tree(BTree &L,char *str);
     void init_queue(Squeue &L);
     void input_queue(Squeue &L,BTree tree);
     BTree pop_queue(Squeue &L);
     bool empty_queue(Squeue &L);
     void cengxu_printlist(BTree tree);
     void printlist(BTree L);

    int main()
    {
        char str[20]="ABCDEFG";
        BTree L;
        creat_tree(L,str);
        cengxu_printlist(L);
        //printlist(L);
        return 0;
    }

    void creat_tree(BTree &L,char *str)
        {
            L=new btree;
            L=NULL;
            int i=0;
            BTree pnew;
            Qnode  pcur,tail,newlist,head;
            while(str[i]!='\0')
            {
                pnew=new btree;
                pnew->date=str[i];
                pnew->left=NULL;
                pnew->right=NULL;
                if(L==NULL)//树的根节点为空
                {
                    L=pnew;
                    newlist=new qnode;
                    newlist->p=pnew;
                    newlist->next=NULL;
                    head=newlist;
                    tail=newlist;
                    pcur=newlist;
                    i++;
                    continue;
                }

                else
                {
                    newlist=new qnode;
                    newlist->p=pnew;
                    newlist->next=NULL;
                    tail->next=newlist;
                    tail=newlist;


                }

                if(pcur->p->left==NULL)
                {
                   pcur->p->left=pnew;
                }

                else if(pcur->p->right==NULL)
                {

                    pcur->p->right=pnew;
                    pcur=pcur->next;
                }

                i++;
            }
        }



         void init_queue(Squeue &L)
            {
                L=new squeue;
                L->fronts=NULL;
                L->rear=NULL;
            }

        void input_queue(Squeue &L,BTree trees)
            {
                Qnode s=new qnode;
                s->p=trees;
                s->next=NULL;
                if(L->rear==NULL)
                {
                   L->fronts=L->rear=s;

                }
                else
                {
                    s->next=L->rear->next;
                    L->rear->next=s;
                    L->rear=s;
                }
            }
    bool empty_queue(Squeue &L)
        {
            if(L->fronts==NULL)
            {
                return true;
            }

            else
            {
                return false;
            }
        }

        BTree pop_queue(Squeue &L)
            {
              if (!empty_queue(L))
              {
                if(L->fronts==L->rear)//只有一个元素
                {
                   BTree t=L->fronts->p;
                   L->fronts=L->rear=NULL;
                   return t;
                }

              else
                {
                   Qnode q=L->fronts;
                   L->fronts=q->next;
                   return q->p;

                }

              }



            }



        void cengxu_printlist(BTree treed)
           {
               Squeue L;
               init_queue(L);
               Squeue q=L;//链队
               BTree trees=treed;
               input_queue(L,trees); //入队
               BTree temp;
               while(!empty_queue(L))
               {
                   temp=pop_queue(L);
                   cout<<char(temp->date)<<" ";

                   if(temp->left!=NULL)
                   {
                       input_queue(L,temp->left);
                   }

                 if(temp->right!=NULL)
                   {
                       input_queue(L,temp->right);
                   }
               }
               cout<<endl;
           }

        void printlist(BTree L)
            {
                if(L!=NULL)
                {
                    cout<<char(L->date)<<" ";
                    printlist(L->left);
                    printlist(L->right);
                }
            }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值