다희의 코딩 성장일기

[백준] 1991. 트리 순회 (자바 JAVA) 본문

Algorithm/백준 BOJ

[백준] 1991. 트리 순회 (자바 JAVA)

ilmiodiario 2021. 9. 15. 16:06

[ 문제 ]  [백준] 1991. 트리 순회 (자바 JAVA)

 

문제 링크 : https://www.acmicpc.net/problem/1991

 

1991번: 트리 순회

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

www.acmicpc.net


# 접근 방법 및 풀이 

 

  • 이진트리를 표현하는 방식에 따라 다양한 방법이 있는 문제다.
  • 나는 트리표현을 2차원 배열로 표현하고 전위, 중위, 후위 메소드를 따로 만들어서 풀었다.
  • 물론 메소드를 하나로 전위, 중위, 후위 다 돌릴 수도 있다.
  • 혼자서 천천히 생각해보고 디버깅해보면서 풀었다.
  • 자세한건 코드참조

# 주의할 점 

 

  • 디버깅해서 재귀 잘 도는지 확인

 

JAVA 코드
package Silver;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.StringTokenizer;

public class bj1991_트리순회 {
	static int N, arr[][];
	static String s;
	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
		N = Integer.parseInt(in.readLine());
		arr = new int[N][2];
		for (int i = 0; i < N; i++) {
			char s[] = in.readLine().replaceAll(" ", "").toCharArray();
			arr[s[0]-65][0] = (s[1]=='.')? -1: s[1]-65;
			arr[s[0]-65][1] = (s[2]=='.')? -1: s[2]-65;
		}
		s = "A";
		preorder(0);
		System.out.println(s);
		s = "";
		inorder(0);
		System.out.println(s);
		s = "";
		postorder(0);
		System.out.println(s);
	}
	private static void preorder(int r) {
		for (int i = 0; i < 2; i++) {
			if(arr[r][i] != -1) {
				s += (char)(arr[r][i]+65);
				preorder(arr[r][i]);
			}
		}
	}
	private static void inorder(int r) {
		for (int i = 0; i < 2; i++) {
			if(arr[r][i] != -1) {
				inorder(arr[r][i]);
			}
			if(i != 1)
				s += (char)(r+65);
		}
	}
	private static void postorder(int r) {
		for (int i = 0; i < 2; i++) {
			if(arr[r][i] != -1) {
				postorder(arr[r][i]);
			}
		}
		s += (char)(r+65);
	}
}

 

 

 

REVIEW

백준 재귀 기초 다 풀어볼거다.

Comments