search 2ºÐ Ž»ö³ª¹«¿¡ ÀÖ¾î¼ÀÇ µ¥ÀÌÅÍÀÇ Å½»ö insert 2ºÐ Ž»ö³ª¹«¿¡ ÀÖ¾î¼ÀÇ ³ëµåÀÇ »ðÀÔ delete 2ºÐ Ž»ö³ª¹«¿¡ ÀÖ¾î¼ÀÇ ³ëµåÀÇ »èÁ¦
2ºÐ Ž»ö³ª¹«¿¡ ÀÖ¾î¼ÀÇ µ¥ÀÌÅÍÀÇ Å½»ö
NODE *search(int key);
2ºÐ Ž»ö³ª¹«¿¡ ÀÖ¾î¼ÀÇ ³ëµåÀÇ »ðÀÔ
NODE *insert(int key);
2ºÐ Ž»ö³ª¹«¿¡ ÀÖ¾î¼ÀÇ ³ëµåÀÇ »èÁ¦
int delete(int key);
typedef struct _node {
int key; /* ºñ±³ÀÇ Å°°¡ µÇ´Â Çʵå */
int info; /* ±× ¿ÜÀÇ Çʵå */
struct _node *left; /* ÁÂÃøÀÇ ¾ÆÀ̸¦ °¡¸®Å²´Ù */
struct _node *right; /* ¿ìÃøÀÇ ¾ÆÀ̸¦ °¡¸®Å²´Ù */
} NODE;
2ºÐ Ž»ö³ª¹«¿¡ ÀÖ¾î¼ÀÇ µ¥ÀÌÅÍÀÇ Å½»ö ÇÔ¼ö¿¡ ´ëÇØ
key Ž»ö ¸ñÇ¥·Î Çϴ ŰÀÇ °ª
2ºÐ Ž»ö³ª¹«¿¡ ÀÖ¾î¼ÀÇ ³ëµåÀÇ »ðÀÔ ÇÔ¼ö¿¡ ´ëÇØ
key Ãß°¡ÇÏ°í ½ÍÀº ŰÀÇ °ª
2ºÐ Ž»ö³ª¹«¿¡ ÀÖ¾î¼ÀÇ ³ëµåÀÇ »èÁ¦ ÇÔ¼ö¿¡ ´ëÇØ
key »èÁ¦ÇÏ°í ½ÍÀº ŰÀÇ °ª
2ºÐ Ž»ö³ª¹«¿¡ ÀÖ¾î¼ÀÇ µ¥ÀÌÅÍÀÇ Å½»ö ÇÔ¼ö¿¡ ´ëÇØ
Ž»öÀÌ ¼º°øÇßÀ» ¶§´Â ¹ß°ßµÈ ³ëµå¿¡ÀÇ Æ÷ÀÎÅÍ.
½ÇÆÐ ¶§´Â NULL.
2ºÐ Ž»ö³ª¹«¿¡ ÀÖ¾î¼ÀÇ µ¥ÀÌÅÍÀÇ »ðÀÔ ÇÔ¼ö¿¡ ´ëÇØ
»ðÀÔÀÌ ¼º°øÇßÀ» ¶§´Â »ðÀÔÇÑ ³ëµå¿¡ÀÇ Æ÷ÀÎÅÍ.
»ðÀÔ ½ÇÆÐ ¶§³ª »ðÀÔÇÏ·Á°í Çϴ Ű°¡ ÀÌ¹Ì ÀÖÀ» ¶§´Â NULL.
2ºÐ Ž»ö³ª¹«¿¡ ÀÖ¾î¼ÀÇ µ¥ÀÌÅÍÀÇ »èÁ¦ ÇÔ¼ö¿¡ ´ëÇØ
»èÁ¦°¡ ¼º°øÇßÀ» ¶§´Â 0.
»èÁ¦ÇÏ·Á°í Çϴ Ű°¡ Á¸ÀçÇϰí ÀÖÁö ¾ÊÀ» ¶§´Â -1.
static NODE *root = NULL;
NODE *search(int key){
NODE *node = root;
while (node ! = NULL) {
if (key == node->key)
return node;
if (key < node->key)
node = node->left;
else
node = node->right;
}
return NULL;
}
NODE *insert(int key){
NODE **node = &root;
while (*node ! = NULL) {
if (key == (*node)->key) return NULL;
if (key < (*node)->key) node = &((*node)->left);
else node = &((*node)->right);
}
if ((*node = (NODE *) malloc(sizeof(NODE))) == NULL) return NULL;
(*node)->key = key;
(*node)->left = (*node)->right = NULL;
return (*node);
}
int delete(int key){
NODE **node = &root;
NODE *next, **leftmax, *tmp;
for (;;) {
if (*node == NULL) return -1;
if (key == (*node)->key) break;
if (key < (*node)->key) node = &((*node)->left);
else node = &((*node)->right);
}
if ((*node)->left == NULL)
next = (*node)->right;
else {
leftmax = &((*node)->left);
while ((*leftmax)->right ! = NULL)
leftmax = &((*leftmax)->right);
next = *leftmax;
*leftmax = (*leftmax)->left;
next->left = (*node)->left;
next->right = (*node)->right;
}
tmp = *node;
*node = next;
free(tmp);
return 0;
}
2ºÐ Ž»ö³ª¹«¿¡ ÀÇÇÑ Å½»öÀº, ·çÆ®·ÎºÎÅÍ ½ÃÀÛÇØ Ž»ö ŰÀÇ °ªÀÌ ±× ³ëµåÀÇ µ¥ÀÌÅͺ¸´Ù ÀÛÀº°¡ Å« °Íó·³ µû¶ó, ÁÂÃø ¶Ç´Â ¿ìÃøÀÇ ¾ÆÀÌ ³ëµå ¶ó°í °£´Ù.
¿ÏÀüÇÏ°Ô ³¬½Ã°¡ ÃëÇϸé 2ºÐ Ž»ö³ª¹«¶ó¸é, n °³ÀÇ °ÍÀ» Á¶»çÇϴµ¥ ÇÊ¿äÇÑ ºñ±³ ȸ¼ö (Àº)´Â O(log n)ÀÌ´Ù. ±×·¯³ª, Á¿ìÀÇ ¹ë·±½º°¡ ³ª»Û ³ª¹«¿¡¼´Â Ž»ö ½Ã°£ÀÌÀΰ¡ ºô·Á ÃÖ¾Ç °æ¿ìÀÇ °è»ê·®Àº O(n)ÀÌ´Ù.
¶Ç, »èÁ¦ÀÇ ÇÁ·Î±×·¥ÀÌ ²Ï º¹ÀâÇÏ°Ô µÇ¾î ¹ö¸®´Â °ÍÀº, 2ºÐ Ž»ö³ª¹« ÀÇ Æ¯Â¡ÀÌ´Ù. »ý°¢ÇØ¾ß ÇÒ ÄÉÀ̽º·Î¼ »èÁ¦ÇÏ·Á°í ÇÏ´Â ³ëµå°¡
µ¡ºÙ¿© 2ºÐ Ž»ö³ª¹«ÀÇ ¼ºÁú»ó, °°Àº Ž»ö ۸¦ °¡Áö´Â ³ëµå´Â 1°³ ¹Û¿¡ ¾ø´Â°Å¾ß ±×¸®°í, °°Àº Ž»ö Ű¿¡ º¹¼öÀÇ µ¥ÀÌÅ͸¦ °¡Áö´Â °æ¿ì´Â µ¥ÀÌÅÍ ±¸Á¶ÁßÀÇ info¸¦ ±Ã¸® ÇÒ Çʿ䰡 ÀÖ´Ù.