queue?? tree?? bsf 인가 ㅇㅈㅇ?
#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();
}