VioletaBabel

단순한 이진트리 코드 본문

알고리즘
단순한 이진트리 코드
Beabletoet 2017. 4. 29. 01:42

#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");

}

}

Comments