方法一:
//打印指定层结点:
void print_by_level_1(Tree T) { int i = 0; for (i = 0; ; i++) { if (!print_at_level(T, i)) break; } cout << endl; }
//遍历所有层
void print_by_level_1(Tree T) { int i = 0; for (i = 0; ; i++) { if (!print_at_level(T, i)) break; } cout << endl; }
方法二:使用l队列
void level_tree(bintree t){ seqqueue q; bintree temp; q.front = q.rear = 0; if(!t){ printf("the tree is empty "); return ; } enter(&q,t); while(q.front != q.rear){ t=del(&q); printf("%c ",t->data); if(t->lchild){ enter(&q,t->lchild); } if(t->rchild){ enter(&q,t->rchild); } } }
//队列定义:
#define MAX 1000 typedef struct seqqueue{ bintree data[MAX]; int front; int rear; }seqqueue; void enter(seqqueue *q,bintree t){ if(q->rear == MAX){ printf("the queue is full! "); }else{ q->data[q->rear] = t; q->rear++; } } bintree del(seqqueue *q){ if(q->front == q->rear){ return NULL; }else{ q->front++; return q->data[q->front-1]; } }
其它可参考: