16.层次遍历
代码。
/* 层次遍历 */ #include<iostream> #include<cstdlib> using namespace std; typedef char Elemtype; typedef struct node { Elemtype data; struct node* left; struct node* right; }Tree; //先序建立一个树,NULL指针用0代替 Tree* create_tree(void) { Tree* root=NULL; char ch; cin>>ch; if(ch=='0') return NULL; else { root=(Tree*)malloc(sizeof(Tree)); root->data=ch; root->left=create_tree(); root->right=create_tree(); } return root; } void free_tree(Tree* t) { if(t) { free_tree(t->left); free_tree(t->right); free(t); t=NULL; } } /*建立队列*/ #define MAX 100 typedef struct { Tree* data[MAX]; int front; int tail; }Queue; Queue* create_queue(void) { Queue* q=(Queue*)malloc(sizeof(Queue)); if(q) q->tail=q->front=0; else cout<<"create queue error"<<endl; return q; } int empty_queue(Queue* q) { if(q->front==q->tail) return 1; return 0; } int full_queue(Queue* q) { if((q->tail+1)%MAX==q->front) return 1; return 0; } void push_queue(Queue* q,Tree* t) { if(full_queue(q)) return ; q->data[q->tail]=t; q->tail=(q->tail+1)%MAX; } void pop_queue(Queue* q,Tree** t) { if(empty_queue(q)) return; *t=q->data[q->front]; q->front=(q->front+1)%MAX; } void free_queue(Queue* q) { free(q); } //层次遍历 void cengci(Tree* t) { Tree *p=t; Queue* q; q=create_queue(); push_queue(q,p); while(!empty_queue(q)) { pop_queue(q,&p); if(p!=NULL) { cout<<p->data<<" "; push_queue(q,p->left); push_queue(q,p->right); } } free_queue(q); cout<<endl; } int main(void) { Tree *root; root=create_tree(); cengci(root); return 0; }