#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); // 후위 순회
}