队列 树(层序输出二叉树)

来源:互联网 发布:java 字符串包含汉字 编辑:程序博客网 时间:2024/06/03 19:38

 

Code:
  1. // rtetre.cpp : 定义控制台应用程序的入口点。  
  2. //  
  3.   
  4. #include "stdafx.h"  
  5.   
  6. #include <iostream>  
  7.   
  8. using namespace std;  
  9.   
  10. typedef char ElemType;  
  11. /***********************stuct tree********************************/  
  12. typedef struct Bitnode  
  13.   {  
  14.      ElemType data;  
  15.     struct Bitnode *lchild,*rchild;  
  16.   }Bitnode,*BitTree;//树  
  17.   
  18.   
  19. /*******************the queue*************************** 
  20. ***********************************************/  
  21. typedef struct qnode  
  22. {struct Bitnode* Tree;//yahoo  
  23.  struct qnode *next;  
  24.     }qlink;  
  25. typedef struct  
  26. { qlink *front;  
  27.   qlink *rear;  
  28.     }linkqueue;  
  29.   
  30. void Init_Queue(linkqueue*LQ)  
  31. {LQ->front=LQ->rear=new qlink;  
  32.  LQ->front->next=NULL;  
  33. }  
  34. int Empty_L_Queue(linkqueue LQ)  
  35. {if(LQ.front==LQ.rear)return 1;  
  36. else return 0;  
  37. }  
  38. void Push_Queue(linkqueue *LQ,BitTree T)//Push_Queue(&LQ,e)  
  39. { qlink *p;  
  40.   p=new qlink;  
  41.   p->Tree=T;  
  42.   p->next=NULL;  
  43.   LQ->rear->next=p;  
  44.   LQ->rear=p;  
  45.     }  
  46. int Dlete_Queue(linkqueue *LQ,BitTree &p)//Dlete_Queue(&LQ,&e)哲理的& 是关键的关键  
  47. {qlink *temp;  
  48. if(Empty_L_Queue(*LQ))return 0;// !!!!!!!!!!!!!!!!!!!  
  49. temp=LQ->front->next;  
  50. p=temp->Tree;  
  51. LQ->front->next=temp->next;  
  52. if(LQ->rear==temp)  
  53.    LQ->rear=LQ->front;  
  54.    delete temp;  
  55.    return 1;  
  56.     }  
  57. int Q_Display(linkqueue LQ)//Q_Display(LQ)  
  58. {qlink *p;  
  59.  if(Empty_L_Queue(LQ))return 0;  
  60.  p=LQ.front->next;  
  61.  while(p!=NULL)  
  62.  {cout<<p->Tree<<" ";  
  63.  p=p->next;  
  64.     }  
  65.     cout<<endl;  
  66.     return 1;  
  67. }  
  68. int Get_Front(linkqueue LQ,BitTree p)  
  69. {if(Empty_L_Queue(LQ))return 0;  
  70. p=LQ.front->next->Tree;  
  71. return 1;  
  72.     }  
  73. /*******************the binary Tree*************************** 
  74. ***********************************************/  
  75. int CreatB_Tree(BitTree &T)  
  76. {  
  77.  ElemType ch;  
  78.  ch=getchar();//  
  79.  if(ch==' ')T=NULL;  
  80. else  
  81.  {if(!(T=new Bitnode))cout<<"Error!"<<endl;  
  82.   T->data=ch;  
  83.   CreatB_Tree(T->lchild);  
  84.   CreatB_Tree(T->rchild);  
  85.   }  
  86. return 1;  
  87. }  
  88. /********************practice*************************/  
  89. /******************By layer traversal**********************/  
  90. int Layer_Traver_B_Tree(BitTree T)  
  91.    {BitTree p;  
  92.     linkqueue LQ;  
  93.     Init_Queue(&LQ);  
  94.   
  95.     p=T;  
  96.     if(!T)return 0;  
  97.     Push_Queue(&LQ,p);  
  98.   // Push_Queue(&LQ,p->lchild);  
  99.   
  100.     while(!Empty_L_Queue(LQ))  
  101.         {Dlete_Queue(&LQ,p);  
  102.     if(p)cout<<p->data<<" ";  
  103.    if(p->lchild)Push_Queue(&LQ,p->lchild);  
  104.    if(p->rchild)Push_Queue(&LQ,p->rchild);  
  105.         }  
  106.     return 1;  
  107.     }  
  108. int main()  
  109. {  
  110.     BitTree T;  
  111.     CreatB_Tree(T);  
  112.     Layer_Traver_B_Tree(T);  
  113.     //cout<<LQ.front->data;  
  114.  //   cout<<Empty_L_Queue(LQ)<<endl;  
  115. int m;  
  116. cin>>m;  
  117.     cout << "Hello world!" << endl;  
  118.     return 0;  
  119. }