반응형
내용 출처 : YES C (정보공학연구소 /생능출판사)
데이터를 입력받아 트리에 저장한 후 출력한다.
단 값이 입력될 때, root보다 작으면 왼쪽 노드에, 크면 오른쪽 노드에 저장한다.
이렇게 저장한 후 중위순 운행을 하면 오름차순으로 정렬된 결과가 출력된다.
//제대로 작동 안함. 다시 분석해야할 예제
#include <stdio.h> #include <stdlib.h> #include <assert.h> #include <ctype.h> #define LEFT 0 #define RIGHT 1 typedef int DATA; struct NODE { DATA d; NODE *left; NODE *right; }; typedef NODE* BTREE; BTREE add_node(BTREE parent, BTREE r_node, DATA d1, int r_1); BTREE new_node(DATA d1); void inorder(BTREE root); BTREE root = NULL; int main() { DATA a; int size = 10; int i; for (i = 0; i < size; i++) { scanf_s("%d", &a); add_node(root, root, a, 0); } printf("Inorder binary tree traversal : "); inorder(root); printf("\n"); } BTREE add_node(BTREE parent, BTREE r_node, DATA d1, int r_1) { if (root == NULL) { root = new_node(d1); } 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->left, d1, RIGHT); } else { parent = r_node; add_node(parent, r_node->left, d1, LEFT); } } return root; } 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 inorder(BTREE root) { if (root != NULL) { inorder(root->left); printf("%d ", root->d); inorder(root->right); } }
반응형