/*
 * binaryTree
 *     by niy@cc.utsunomiya-u.ac.jp on July 16, 1996
 */

#include <stdio.h>
#include <stdlib.h>

#include "binaryTree.c"

int main(void) {

    char buf[100];
    int  i;
    int  done = 0;

    printf("--- 2ºÐ Ž»ö³ª¹«¿¡ À־ÀÇ »ðÀÔ, °Ë»ö, »èÁ¦ ---\n");
    printf("ÀÌÇÏÀÇ Ä¿¸àµå¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Â \n");
    printf("  Ix: xÀÇ °ªÀ» »ðÀÔ \n");
    printf("  Fx: xÀÇ °ªÀ» °Ë»ö \n");
    printf("  Dx: xÀÇ °ªÀ» »èÁ¦ \n");
    printf("  W:  2ºÐ Ž»ö³ª¹«¸¦ º¸´Â \n");
    printf("  Q:  Á¾·á \n");

    while (! done) {
        printf("Ä¿¸àµå?  ");
        gets(buf);
        i = 0;
        while (buf[i] == ' ' || buf[i] == '\t' || buf[i] == '\n') i++;
        switch (buf[i]) {
        case 'i':
        case 'I':
            if (insert(buf[i+1]) == NULL)
                printf("%c ´Â µî·ÏÁ¦ÀÔ´Ï´Ù \n", buf[i+1]);
            break;
        case 'f':
        case 'F':
            if (search(buf[i+1]) == NULL)
                printf("%c ´Â ¹Ìµî·ÏÀÔ´Ï´Ù \n", buf[i+1]);
            break;
        case 'd':
        case 'D':
            if (delete(buf[i+1]) ! = 0)
                printf("%c ´Â ¹Ìµî·ÏÀÔ´Ï´Ù \n", buf[i+1]);
            break;
        case 'w':
        case 'W':
            dump(root);
            break;
        case 'q':
        case 'Q':
            done = 1;
            break;
        default:
            printf("»ç¿ëÇÒ ¼ö ÀÖ´Â Ä¿¸àµå´Â I, F, D, W ÀÔ´Ï´Ù \n");
            break;
        }
    }
    return 0;
}

int dump(NODE *node){
    static int depth = 0;

    if (node == NULL) 
        return;
    if (node->left ! = NULL) {
        depth++;
        dump(node->left);
        depth--;
    }
    printf("%c (%d) \n", node->key, depth);
    if (node->right ! = NULL) {
        depth++;
        dump(node->right);
        depth--;
    }
}