ShovelingLife 2022. 6. 11. 20:38
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
 
// 트리 구조체
typedef struct treeNode {
    int data;
    treeNode* left; // 왼쪽 노드에 대한 포인터
    treeNode* right; // 오른쪽 노드에 대한 포인터
};
 
// 트리 객체 초기화
treeNode* makeRootNode(int data, treeNode* leftNode, treeNode* rightNode) {
    treeNode* root = (treeNode*)malloc(sizeof(treeNode));
    root->data = data; // data 초기화
    root->left = leftNode; // 왼쪽 링크 초기화
    root->right = rightNode; // 오른쪽 링크 초기화
    return root;
}
 
// 전위 순회 함수
void preorder(treeNode* rootNode) {
    if (rootNode != NULL) {
        printf("%3d", rootNode->data);
        preorder(rootNode->left);
        preorder(rootNode->right);
    }
}
 
// 중위 순회 함수
void inorder(treeNode* rootNode) {
    if (rootNode != NULL) {
        inorder(rootNode->left);
        printf("%3d", rootNode->data);
        inorder(rootNode->right);
    }
}
 
// 후위 순회 함수
void postorder(treeNode* rootNode) {
    if (rootNode != NULL) {
        postorder(rootNode->left);
        postorder(rootNode->right);
        printf("%3d", rootNode->data);
    }
}
 
//   트 리 구 조
//            48
//       7          57
//   39  72   29  61
//84 15
int main() {
    // (A*B-C/D) 수식 이진 트리 생성
    treeNode* n9 = makeRootNode(15, NULL, NULL);
    treeNode* n8 = makeRootNode(84, NULL, NULL);
    treeNode* n7 = makeRootNode(61, NULL, NULL);
    treeNode* n6 = makeRootNode(29, NULL, NULL);
    treeNode* n5 = makeRootNode(72, NULL, NULL);
    treeNode* n4 = makeRootNode(39, n8, n9);
    treeNode* n3 = makeRootNode(57, n6, n7);
    treeNode* n2 = makeRootNode(7, n4, n5);
    treeNode* rootNode = makeRootNode(48, n2, n3);
 
    printf("\n 전위 순회로 구현 : "); preorder(rootNode);  // 전위 순회
    printf("\n 중위 순회로 구현 : "); inorder(rootNode);   // 중위 순회
    printf("\n 후위 순회로 구현 : "); postorder(rootNode); // 후위 순회
}