#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
블로그 이미지

잉비니

,