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¸¦ ±Ã¸® ÇÒ ÇÊ¿ä°¡ ÀÖ´Ù.