#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
typedef struct TreeNode * element;
#define MAX_QUEUE_SIZE 100
//typedef int *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)
{
if(q->front==q->rear)
return 1;
else
return 0;
}
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("\n큐가 포화");
q->rear=(q->rear+1)%MAX_QUEUE_SIZE;
q->queue[q->rear]=item;
}
element dequeue(QueueType *q)
{
if(is_empty(q))
error("\n큐가 공백");
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];
}
typedef struct TreeNode
{
int data;
struct TreeNode *left, *right;
} TreeNode;
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 level_order(TreeNode *ptr)
{
int count=1;
QueueType q;
init(&q);
if(!ptr) return;
enqueue(&q, ptr);
while(root)
{
ptr=dequeue(&q);
if(count==1)
{
printf(" ");
printf("%d\n", ptr->data);
}
else if(count==2)
{
printf(" ");
printf("%d", ptr->data);
}
else if(count==3)
{
printf(" ");
printf("%d\n", ptr->data);
}
else if(count>=4)
{
printf(" ");
printf("%d", ptr->data);
}
else if(count>=5)
{
printf("\n ");
printf("%d", ptr->data);
}
if(ptr->left)
{
enqueue(&q, ptr->left);
}
if(ptr->right)
{
enqueue(&q, ptr->right);
}
count++;
}
}
void delete_node(TreeNode **root, int data)
{
TreeNode *p, *child, *succ, *succ_p, *t;
p=NULL;
t=*root;
while(t!=NULL && t->data !=data)
{
p=t;
t=(data<t->data) ? t->left : t->right;
}
if(t==NULL)
{
printf("data가 트리에 없다");
return;
}
if((t->left==NULL)&&(t->right==NULL))
{
if(p!=NULL)
{
if(p->left==t)
p->left=NULL;
else p->right=NULL;
}
else
*root=NULL;
}
else if((t->left==NULL)||(t->right==NULL))
{
child=(t->left!=NULL)? t->left: t->right;
if(p !=NULL)
{
if(p->left==t)
p->left=child;
else p->right=child;
}
else
*root=child;
}
else
{
succ_p=t;
succ=t->right;
while(succ->left!=NULL)
{
succ_p=succ;
succ=succ->left;
}
if(succ_p->left==succ)
succ_p->left=succ->right;
else
succ_p->right=succ->right;
t->data=succ->data;
t=succ;
}
free(t);
}
void main()
{
QueueType q;
init(&q);
//insert_node(&root, 14);
delete_node(&root, 4);
level_order(root);
}
---------------------
이소스 인데 이런거 떠
어쩌라고
오바인거 알지? 아오샹 내눈 ㅠㅠ 걍 보나마나 뻔하지 않을까 링크대입관계 잘 그림그리면서 다시한번 생각해바
귀찮아서 코드는 안봤는데, 대부분 저런오류는 할당된 메모리 범위를 벗어날때(참조할때 보단, 수정할때나 삭제할때) 힙손상 오류를 뿜지롱...