Quick actions

cmd+k|ctrl+k

Navigation

Languages

Binary Tree / Add / Search / Release

Snippet info

Language

C

Visibility

public

Author

kim112mgxld

Created

2020-08-19T06:11:18Z

Updated

2020-08-19T06:11:52Z

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

#define MAX 26

typedef struct _Node {
    char name;
    struct Node * left;
    struct Node * right;
} Node;

Node * root;
char nodeList[MAX][3];

Node* createNode (char name) {
    Node * newNode = (Node*)malloc(sizeof(Node));
    
    newNode->name = name;
    newNode->left = NULL;
    newNode->right = NULL;
    
    return newNode;
}

void initTreeMemory (Node * node) {
    if (node == NULL) {
        return;
    }
    
    initTreeMemory(node->left);
    initTreeMemory(node->right);
    
    free(node);
}

Node* searchParentNode (Node * parent, char targetNode) {
    Node * targetParent = NULL;
    
    if (parent == NULL) {
        return NULL;
    }
    
    if (parent->name == targetNode) {
        return parent;
    }
    
    targetParent = searchParentNode(parent->left, targetNode);
    
    if (targetParent == NULL) {
        targetParent = searchParentNode(parent->right, targetNode);
    }
    
    return targetParent;
}

void showPreNode (Node * parent) {
    if (parent == NULL) {
        return;
    }
    
    printf("%c", parent->name);
    
    showPreNode(parent->left);
    showPreNode(parent->right);
}

void showInNode (Node * parent) {
    if (parent == NULL) {
        return;
    }
    
    showInNode(parent->left);
    
    printf("%c", parent->name);
    
    showInNode(parent->right);
}

void showPostNode (Node * parent) {
    if (parent == NULL) {
        return;
    }
    
    showPostNode(parent->left);
    showPostNode(parent->right);
    
    printf("%c", parent->name);
}

void startMakeTree (int N) {
    root = createNode(nodeList[0][0]);
    
    for (int y = 0; y < N; y++) {
        Node * parentNode = NULL;
        
        for (int x = 0; x < 3; x++) {
            char targetNode = nodeList[y][x];
            
            if (targetNode == '.') {
                continue;
            }
            
            if (x == 0) {
                parentNode = searchParentNode(root, targetNode);
            } else if (x == 1) {
                if (parentNode != NULL) {
                    parentNode->left = createNode(targetNode);
                }
            } else {
                if (parentNode != NULL) {
                    parentNode->right = createNode(targetNode);
                }
            }
        }
    }
}

int main(void) {
    int N = 0;
    
    scanf("%d", &N);
    
    for (int i = 0; i < N; i++) {
        for (int j = 0; j < 3; j++) {
            scanf("%s", &nodeList[i][j]);
        }
    }
    
    startMakeTree(N);
    showPreNode(root);
    printf("\n");
    showInNode(root);
    printf("\n");
    showPostNode(root);
    
    initTreeMemory(root);
    
    return 0;
}
INFO