본문 바로가기

머리맞대는이야기/백준

[1991] 트리순회

반응형

출처:

www.acmicpc.net/problem/1991

 

1991번: 트리 순회

첫째 줄에는 이진 트리의 노드의 개수 N(1≤N≤26)이 주어진다. 둘째 줄부터 N개의 줄에 걸쳐 각 노드와 그의 왼쪽 자식 노드, 오른쪽 자식 노드가 주어진다. 노드의 이름은 A부터 차례대로 영문자

www.acmicpc.net

풀이과정

dfs 에서 배운 재귀함수 사용해서 구현한다.

 

 


작성코드

package Test;

import java.util.*;
import java.io.*;

public class MainNew {

	private static HashMap<String, List<String>> map = new HashMap<>();
	private static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

	public static void main(String[] args) throws IOException {

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int n = Integer.parseInt(br.readLine());

		for (int i = 0; i < n; i++) {
			String[] tmp = br.readLine().split("\\s");
			List<String> list = new ArrayList<>();
			list.add(tmp[1]);
			list.add(tmp[2]);
			map.put(tmp[0], list);
		} // 노드 3개씩 저장

		preorder("A");
		bw.write("\n");
		inorder("A");
		bw.write("\n");
		postorder("A");

		br.close();
		bw.flush();
		bw.close();
	} // main

	private static void preorder(String s) throws IOException {
		if (s.equals("."))
			return;

		bw.write(s);
		preorder(map.get(s).get(0));
		preorder(map.get(s).get(1));

	}

	private static void inorder(String s) throws IOException {
		if (s.equals("."))
			return;

		inorder(map.get(s).get(0));
		bw.write(s);
		inorder(map.get(s).get(1));

	}

	private static void postorder(String s) throws IOException {
		if (s.equals("."))
			return;

		postorder(map.get(s).get(0));
		postorder(map.get(s).get(1));
		bw.write(s);
	}
} // MainNew

memo

bufferedwriter,reader 에 익숙해지는 중이다.

재귀함수의 이해에 도움되는 문제인 것 같다.

map 자료형을 사용한 점, map value 값을 리스트형식, 또 그것이 스트링 형태인 것으로 담은 것

이 정도가 이 문제의 특이사항인 것 같다.

 

 

반응형

'머리맞대는이야기 > 백준' 카테고리의 다른 글

[7490] 0 만들기  (0) 2020.10.04
[1074] Z  (0) 2020.10.04
[2747] 피보나치 수  (0) 2020.10.03
[1939] 중량제한  (0) 2020.09.30
[17269] 이름궁합 테스트  (0) 2020.09.29