IT

queue?? tree?? bsf 인가 ㅇㅈㅇ?

kio467 2014. 6. 9. 11:10

#include <stdio.h>

#include <stdlib.h>

#define TRUE 1

#define FALSE 0


typedef struct Node

{

     int data;

     _node *left;

     _node *right;

} _node;

_node *Root;

 

_node **Queue;

int QSize;

int head,tail;

 

void InitQueue(int size)

{

     QSize=size;

     Queue=(_node **)malloc(QSize*sizeof(_node *));

     head=tail=0;

}

 

void FreeQueue()

{

     free(Queue);

}

 

BOOL Insert(_node *data)

{

     if ((tail+1) % QSize == head) {

          return FALSE;

     }

     Queue[tail]=data;

     tail=(tail+1) % QSize;

     return TRUE;

}

 

_node *Delete()

{

     _node *data;

 

     if (head==tail) {

          return NULL;

     }

     data=Queue[head];

     head=(head+1) % QSize;

     return data;

}

 

void InitTree(int data)

{

     Root=(_node *)malloc(sizeof(_node));

     Root->data=data;

}

 

_node *AddChild(_node *Parent,int data,BOOL bLeft)

{

     _node *New;

 

     New=(_node *)malloc(sizeof(_node));

     New->data=data;

     New->left=NULL;

     New->right=NULL;

     if (bLeft) {

          Parent->left=New;

     } else {

          Parent->right=New;

     }

     return New;

}

 

void FreeTree(_node *R)

{

     if (R->left) FreeTree(R->left);

     if (R->right) FreeTree(R->right);

     free(R);

}

 

void LevelOrder(_node *R)

{

     _node *t_node;

 

     Insert(R);

     while (head != tail) {

          t_node=Delete();

          printf("%d ",t_node->data);

          if (t_node->left) Insert(t_node->left);

          if (t_node->right) Insert(t_node->right);

     }

}

 

void main()

{

     _node *Left,*Right;

 

     InitQueue(128);

     InitTree(1);

     Left=AddChild(Root,2,TRUE);

     Right=AddChild(Root,3,FALSE);

     AddChild(Left,4,TRUE);

     AddChild(Left,5,FALSE);

     AddChild(Right,6,TRUE);

 

     LevelOrder(Root);puts("");

 

     FreeTree(Root);

     FreeQueue();

}