#include<stdio.h>
#include<stdlib.h>
#define MAX_QUEUE_SIZE 100
typedef struct TreeNode{
int data;
struct TreeNode *left, *right;
}TreeNode;
typedef TreeNode *element;
typedef struct{
element queue[MAX_QUEUE_SIZE];
int front, rear;
}QueueType;
TreeNode n1={1 , NULL, NULL};
TreeNode n2={4 , &n1, NULL};
TreeNode n3={16 , NULL, NULL};
TreeNode n4={25 , NULL, NULL};
TreeNode n5={20 , &n3, &n4};
TreeNode n6={15 , &n2, &n5};
TreeNode *root=&n6;
void error(char *message){
fprintf(stderr,"%s\n",message);
exit(1);
}
void init(QueueType *q){
q->front = q->rear = 0;
}
int is_empty(QueueType *q){
return (q->front == q->rear);
}
int is_full(QueueType *q){
return ((q->rear+1)%MAX_QUEUE_SIZE == q-> front);
}
void enqueue(QueueType *q,element item){
if( is_full(q))
error("Q is fUll");
q->rear = (q->rear + 1) % MAX_QUEUE_SIZE;
q->queue[q->rear] = item;
}
element dequeue(QueueType *q){
if (is_empty(q))
error("Q is empty");
q->front = (q->front+1) % MAX_QUEUE_SIZE;
return q->queue[q->front];
}
void display_everything(QueueType *q){
int i,len;
len = (q->front)-(q->rear);
i=(q->front)+1;
while(i<MAX_QUEUE_SIZE){
printf("%c\n", q->queue[i]);
i++;
}
i=0;
while(i<len){
printf("%c\n", q->queue[i]);
i++;
}
}
void level_order(TreeNode *ptr){
QueueType q;
init(&q);
if(ptr == NULL) return;
enqueue(&q, ptr);
while(!is_empty(&q)) {
ptr = dequeue(&q);
printf("%d ", ptr->data);
if( ptr->left)
enqueue(&q, ptr->left);
if(ptr->right)
enqueue(&q, ptr->right);
}
}
int main(void){
level_order(root);
return 0;
}
'이전것 > Algorithm' 카테고리의 다른 글
원을 만드는 것 (0) | 2014.09.12 |
---|---|
이진 트리의 연산 // 노드,단말노드의 개수 (0) | 2014.06.02 |
정적->동적 트리 미완성 (0) | 2014.05.28 |
배열 트리 (0) | 2014.05.26 |
배열 큐 전체출력 (0) | 2014.05.21 |