게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
트리 문제인데 (C) 도움이 필요합니다
게시물ID : programmer_16661짧은주소 복사하기
작성자 : 동굴앞비
추천 : 0
조회수 : 339회
댓글수 : 2개
등록시간 : 2016/04/11 22:01:37
#include <stdio.h>
#include <stdlib.h>
#include <memory.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;

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->rear = (q->rear + 1) % MAX_QUEUE_SIZE;
q->queue[q->rear] = item;
}
// 삭제 함수
element dequeue(QueueType *q)
{
if (is_empty(q))
error("큐가 공백상태입니다");
q->front = (q->front + 1) % MAX_QUEUE_SIZE;
return q->queue[q->front];
}
element peek(QueueType *q)
{
if (is_empty(q))
error("큐가공백상태입니다");
return q->queue[(q->front + 1) % MAX_QUEUE_SIZE];
}
// 큐----------------------------------------------------------------------------
inorder(TreeNode *root){
if (root){
inorder(root->left);
printf("%d ", root->data);
inorder(root->right);
}
}
preorder(TreeNode *root){
if (root){
printf("%d ", root->data);
preorder(root->left);
preorder(root->right);
}
}
postorder(TreeNode *root){
if (root){
postorder(root->left);
postorder(root->right);
printf("%d ", root->data);
}
}
void level_order(TreeNode *root){
QueueType q;

init(&q);
if (!root)return;
while (!is_empty(&q)) {
root = dequeue(&q);
printf(" %d ", root->data);
if (root->left)
enqueue(&q, root->left);
if (root->right)
enqueue(&q, root->right);
}

}

void main()
{
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;

inorder(root);
printf("\n");
preorder(root);
printf("\n");
postorder(root);
printf("\n");
level_order(root);
}

level_order 이친구가 잘 안나오는데 어떻게 해야 나올까요 음..
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호