You will be fine

<Algorithm> 117. 중위순회(SWExpert)

by BFine
반응형

1. 중위순회(SWExpert)

  • 재귀를 이용한 트리 기본 순회문제

  • 오랜만에 트리문제를 풀어보니 선뜻 생각이 나지않아 당황했지만 금방 풀 수 있었다.

  • 첫 제출할때 fail 났는데 이유가 res의 chatAt으로 했는데 테스트케이스를 보니 10자리가 넘어가는 Node가 있었다. -> Token으로 대체함

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
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
 
    public class Solution {
        static String res;
        static char[] alp;
        public static void main(String[] args) throws IOException {
            
            StringBuilder sb = new StringBuilder("");
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            for(int t = 0; t<10;t++) {
                int N = Integer.parseInt(br.readLine());
                Node[] tree = new Node[N+1];
                res = "";
                alp = new char[N + 1];
                /******************************
                 * 재귀를 활용해 L Root R 순서로 탐색 후
                 * 출력한다.
                 *******************************/
 
                for (int i = 1; i < N + 1; i++) {
                    StringTokenizer st = new StringTokenizer(br.readLine());
                    int idx = Integer.parseInt(st.nextToken());
                    alp[idx] = st.nextToken().charAt(0);
                    tree[i] = new Node(idx);
                    if (st.hasMoreElements()) {
                        tree[i].left = Integer.parseInt(st.nextToken());
                    }
                    if (st.hasMoreElements()) {
                        tree[i].right = Integer.parseInt(st.nextToken());
                    }
                }
                int root = 1;
                inorder(tree, root);
                String result_inorder="";
                StringTokenizer st = new StringTokenizer(res);
                while (st.hasMoreTokens()){
                    result_inorder += alp[Integer.parseInt(st.nextToken())];
                }
 
                sb.append("#"+(t+1)+" "+result_inorder+"\n");
            }
            System.out.println(sb.toString());
        }
        public static void inorder(Node[] tree, int idx){
 
            if(tree[idx].left!=0) inorder(tree,tree[idx].left);
            res += tree[idx].v+" ";
            if(tree[idx].right!=0) inorder(tree,tree[idx].right);
 
        }
 
        static class Node{
            int v;
            int left = 0;
            int right = 0;
 
            public Node(int v) {
                this.v = v;
            }
        }
}
 
cs



참고 & 출처  

반응형

블로그의 정보

57개월 BackEnd

BFine

활동하기