/*
#include <stdio.h>
#include <stdlib.h>
int main()
{
printf("Hello world!\n");
return 0;
}
*/
/*
#include <stdio.h>
#include <stdlib.h>
typedef struct treeNode
{
char key;
struct treeNode* left;
struct treeNode* right;
} treeNode;
typedef char element;
treeNode* insertNode(treeNode *p, char x)
{
treeNode *newNode;
if(p == NULL)
{
newNode = (treeNode*)malloc(sizeof(treeNode));
newNode -> key = x;
newNode -> left = NULL;
newNode -> right = NULL;
return newNode;
}
else if(x < p->key)
p->left = insertNode(p->left,x);
else if(x > p->key)
p->right = insertNode(p->right,x);
else
printf("\n 이미 값은 키가 있습니다! \n");
return p;
}
void deleteNode(treeNode *root, element key)
{
treeNode *parent, *p, *succ, *succ_parent;
treeNode *child;
parent = NULL;
p = root;
while((p != NULL)&&(p -> key != key))
{
parent = p;
if(key < p ->key)
{
p = p ->left;
}
else
{
p = p->left;
}
}
if(p == NULL)
{
printf("\n 찾는 키가 이진 트리에 없습니다!!");
return;
}
//삭제할 노드가 단말 노드인 경우
if((p -> left == NULL)&& (p->right == NULL))
{
if(parent != NULL)
{
if(parent -> left == p)
{
parent -> left = NULL;
}
else
{
parent -> right = NULL;
}
}
else
{
root = NULL;
}
}
//삭제할 노드가 한 개의 자식 노드를 가진 경우
else if((p -> left == NULL) || (p -> right == NULL))
{
if(p -> left != NULL)
{
child = p -> left;
}
else
{
child = p -> right;
}
if(parent != NULL)
{
if(parent -> left == p)
{
parent -> left = child;
}
else
{
parent -> right = child;
}
}
else
root = child;
}
else
{
succ_parent = p;
succ = p -> left;
while(succ -> right != NULL)
{
succ_parent = succ;
succ = succ-> right;
}
if(succ_parent->left == succ)
succ_parent -> left = succ -> left;
else
succ_parent -> right = succ->left;
p ->key=succ->key;
p = succ;
}
free(p);
}
void menu()
{
printf("\n----------------------------------");
printf("\n\t1 : 트리출력");
printf("\n\t2 : 문자삭제");
printf("\n----------------------------------");
printf("\n메뉴입력 >>");
}
void displayInorder(treeNode* root)
{
if(root)
{
displayInorder(root->left);
printf("%c_",root->key);
displayInorder(root->right);
}
}
int main()
{
treeNode* root = NULL;
treeNode* foundedNode = NULL;
char choice, key;
root = insertNode(root,'G');
insertNode(root,'I');
insertNode(root,'H');
insertNode(root,'D');
insertNode(root,'B');
insertNode(root,'M');
insertNode(root,'N');
insertNode(root,'A');
insertNode(root,'J');
insertNode(root,'E');
insertNode(root,'Q');
while(1)
{
menu();
choice = getchar();
getchar();
switch(choice)
{
case '1':
printf("\t[이진트리 출력] ");
displayInorder(root);
printf("\n");
break;
default:
printf("삭제할 문자를 입력하세여 : ");
key = getchar();
getchar();
deleteNode(root,key);
break;
}
}
}
*/