VioletaBabel
단순한 이진트리 코드 본문
#include <stdio.h>
#include <stdlib.h>
#define max 100
#define fr (front == rear)
#define mal (node *)malloc(sizeof(node))
typedef struct _node
{
int data;
struct _node *up, *left, *right;
}node;
node *head, *foot, *make;
void initialize();
void nodeInsert();
void searchNode();
int main()
{
initialize();
char command[7];
while (1)
{
printf("\n--\nexit - 종료, insert - 노드 추가, search - 트리 탐색\n명령어 입력 : ");
scanf("%s", &command);
if (!strcmp(command, "exit"))
break;
else if (!strcmp(command, "insert"))
nodeInsert();
else if (!strcmp(command, "search"))
searchNode();
else
printf("잘못 입력하셨습니다.\n");
}
}
void initialize()
{
head = mal;
foot = mal;
head->left = foot;
head->right = foot;
head->up = head;
foot->left = foot;
foot->right = foot;
foot->up = head;
}
void nodeInsert()
{
int num;
printf("\n--\n노드에 넣을 값 : ");
scanf("%d", &num);
node *cursor = head->left;
make = mal;
make->data = num;
if (head->left == foot) // 노드가 하나도 없을 때
{
head->left = make;
head->right = make;
make->up = head;
make->left = foot;
make->right = foot;
foot->up = make;
}
else
{
while (1)
if (cursor->data > num)
{
if (cursor->left != foot)
{
cursor = cursor->left;
continue;
}//어차피 continue가 있으므로 else는 생략
make->left = foot;
make->right = foot;
make->up = cursor;
cursor->left = make;
break;
}
else
{
if (cursor->right != foot)
{
cursor = cursor->right;
continue;
}
make->right = foot;
make->left = foot;
make->up = cursor;
cursor->right = make;
break;
}
}
}
void searchNode()
{
node *cursor = head->left;
char command[6];
while (1)
{
if (cursor == foot)
{
printf("\n탐색이 끝났습니다.\n");
break;
}
(cursor->up == head) ? (printf("\n--\n상위값 없음\n")) : (printf("\n--\n상위값 : %d\n", cursor->up->data));
(cursor->left == foot) ? (printf("값 없음 ")) : (printf("%d ", cursor->left->data));
printf("<- %d ->", cursor->data);
(cursor->right == foot) ? (printf(" 값 없음")) : (printf(" %d", cursor->right->data));
printf("\n\nexit - 탐색 종료, left - 왼쪽 노드로 이동\nright - 오른쪽 노드로 이동, up - 상위 노드로 이동\n명령어 입력 : ");
scanf("%s", &command);
if (!strcmp(command, "exit"))
break;
else if (!strcmp(command, "left"))
{
if (cursor->left == foot)
printf("노드 없음!\n");
else
cursor = cursor->left;
}
else if (!strcmp(command, "right"))
{
if (cursor->right == foot)
printf("노드 없음!\n");
else
cursor = cursor->right;
}
else if (!strcmp(command, "up"))
{
if (cursor->up == head)
printf("노드 없음!\n");
else
cursor = cursor->up;
}
else
printf("잘못 입력하셨습니다.\n");
}
}
'알고리즘' 카테고리의 다른 글
최대공약수, 최소공배수 (0) | 2017.05.28 |
---|---|
[C++/함수]에라토스테네스의 체 (0) | 2017.05.28 |
선택, 삽입, 버블, 셸, 퀵, 기수, 병합, 힙 정렬 코드(퀵 이상함) (0) | 2017.04.27 |
트리 - 전위&중위 순회 알고리즘 (0) | 2017.04.22 |
단일 링크드 리스트 예제 (0) | 2017.04.19 |