개요 백준 문제 1991번을 풀면서 어려웠던 점과 코드를 정리한다. 소요 시간 : 약 1시간https://www.acmicpc.net/problem/1991
문제 이진 트리를 입력받아 전위 순회(preorder traversal), 중위 순회(inorder traversal), 후위 순회(postorder traversal)한 결과를 출력하는 프로그램을 작성하시오.
계획한 풀이법 풀이 방법)
트리 생성
전위,중위,후위 순회를 재귀로 구현
코드 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> using namespace std; int tree[26][2]; void init() { int n = 0; char rootVal,leftVal,rightVal; cin >> n; for(int i=0;i<n;i++) { cin >> rootVal >> leftVal >> rightVal; tree[rootVal-'A'][0] = leftVal; tree[rootVal-'A'][1] = rightVal; } } void preOrder(char root) { if(root == '.') { return; } cout << root; preOrder(tree[root-'A'][0]); preOrder(tree[root-'A'][1]); } void inOrder(char root) { if(root == '.') { return; } inOrder(tree[root-'A'][0]); cout << root; inOrder(tree[root-'A'][1]); } void postOrder(char root) { if(root == '.') { return; } postOrder(tree[root-'A'][0]); postOrder(tree[root-'A'][1]); cout << root; } void solve() { preOrder('A'); cout << "\n"; inOrder('A'); cout << "\n"; postOrder('A'); } int main() { init(); solve(); }
막혔던 점
위 코드는 다른사람의 코드를 보고나니 내 코드가 너무 안쓰러워서 다시 수정한 코드이다. 연결리스트로 구현을 할려고 했는데, 입력을 한줄 씩 받으면서 재귀로 트리를 구성할려고 하니 N만큼 입력받는게 전역함수를 추가하는 등 코드가 더러웠는데 역시 많이 상황에서 배열이 간단한 코드를 구성하는데 도움이 되는 것 같다.
느낀 점