혼종 꼬지마루
[백준] 5639 - 이진 검색 트리 본문
최근 다녀온 삼성전자 DS SW직군 채용상담회에서 TREE와 Linked List문제 트랜트로 바뀌고 있다해서 많이 풀어보는 중
이 문제도 tree문제를 찾아서 풀던 중 기본부터 다지기 위해 시작하는 문제
일단 전위 순회로 입력되는 것을 EOF까지 입력받고, 이 데이터를 바탕으로 Tree를 역추적
그리고 후위 순회로 출력하며 동적할당된 노드를 삭제해주기만 하면 끝
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | #include <iostream> #include <malloc.h> #include <cstdio> using namespace std; typedef struct NODE { int num, ed; NODE *L; NODE *R; }node; int pre[10002], check[10002]; int st = -1; node*makenewnode() { node*tmp = (node*)malloc(sizeof(node)); tmp->num = 0; tmp->ed = 0; tmp->L = 0; tmp->R = 0; return tmp; } void insert(int pos, node *root, int num) { node *tmp = root; tmp->num = num; tmp->L = makenewnode(); tmp->R = makenewnode(); int l = 0, r = 0; for (int i = pos; i <= st; i++) { if (check[i] == 1) break; if (pre[i] < num) { l = i; check[i] = 1; break; } } int i; if (l != 0) i = l + 1; else i = pos; for (; i <= st; i++) { if (check[i] == 1) break; if (pre[i] > num) { r = i; check[i] = 1; break; } } if (l != 0) insert(l + 1,tmp->L, pre[l]); else tmp->L->ed = 1; if (r != 0) insert(r + 1, tmp->R, pre[r]); else tmp->R->ed = 1; } void pos(node*root) { node*tmp = root; if (tmp->ed) { free(tmp); return; } pos(root->L); pos(root->R); cout << tmp->num << endl; free(tmp); } int main(void) { int n; node *root = makenewnode(); while (scanf("%d", &n) != EOF) { pre[++st] = n; } check[0] = 1; insert(1, root, pre[0]); pos(root); } | cs |
'Algorithms > TREE' 카테고리의 다른 글
[백준] 1992 - 트리순회 (0) | 2018.08.27 |
---|