반응형
8. 데이터 파일에서 정수를 읽은 후, 2진트리에 순서에 맞게 저장한 다음, 전위운행한 다음 정렬한 결과를 다른 파일에 정렬하여 넣는 프로그램.
#include <assert.h> #include <stdio.h> #include <stdlib.h> #define LEFT 0 #define RIGHT 1 typedef int DATA; struct node { DATA d; node* left; node* right; }; typedef node* BTREE; BTREE new_node(DATA d1); void add_node(BTREE parent, BTREE r_node, DATA d1, int r_1); void inorder(FILE* ofp, BTREE root); BTREE root = NULL; int main() { DATA a; int size = 10; FILE* ifp; FILE* ofp; //파일을 읽어서 트리를 만든다. fopen_s(&ifp, "in.txt", "r"); if (ifp == NULL) { printf("ifp 파일을 열 수 없습니다.\n"); return 0; } while (!feof(ifp)) { fscanf_s(ifp, "%03d ", &a); add_node(root, root, a, 0); } fclose(ifp); printf("ifp파일을 읽어서 트리를 만들었습니다.\n"); //트리를 정렬해서 파일에 기록한다. fopen_s(&ofp, "out.txt", "w"); if (ofp == NULL) { printf("ofp 파일을 열 수 없습니다.\n"); return 0; } inorder(ofp, root); fclose(ofp); printf("트리를 전위 순회한 결과를 ofp파일에 저장했습니다."); } BTREE new_node(DATA d1) { BTREE t; t = (BTREE)malloc(sizeof(node)); assert(t != NULL); t->d = d1; t->left = NULL; t->right = NULL; return t; } void add_node(BTREE parent, BTREE r_node, DATA d1, int r_1) { if (root == NULL) { root = new_node(d1); return; } else { if (r_node == NULL) { if (r_1 == 0) { parent->left = new_node(d1); } else { parent->right = new_node(d1); } } else if(d1 > r_node->d) { parent = r_node; add_node(parent, r_node->right, d1, RIGHT); } else { parent = r_node; add_node(parent, r_node->right, d1, LEFT); } } } void inorder(FILE* ofp, BTREE root) { if (root != NULL) { inorder(ofp, root->left); fprintf(ofp, "%03d\n", root->d); inorder(ofp, root->right); } }
//트리에 대해서는 제대로 이해가 안된게 확실한듯... 결과가 좀 이상하다.
반응형