본문 바로가기
코딩/백준-자바

[자바] 백준 1991번: 트리 순회

by 철없는민물장어 2023. 1. 27.
728x90

https://www.acmicpc.net/problem/1991

 

1991번: 트리 순회

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

www.acmicpc.net

 

트리를 입력받고,

전위순회, 중위순회, 후위순회 하면 된다.

 

입력이 한줄에 

(노드) (왼쪽 자식) (오른쪽 자식)

으로 들어온다.

 

나는 노드를 Node클래스로 표현했고,

노드는 최대 26개밖에 되지 않기 때문에 Node배열을 만들어서 사용했다.

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

public class P1991 {

	static class Node {
		int left;
		int right;

	}

	static Node[] arr = new Node[26];

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

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		int n = Integer.parseInt(br.readLine());

		for (int i = 0; i < n; i++) {
			StringTokenizer st = new StringTokenizer(br.readLine());
			int now = st.nextToken().charAt(0) - 'A';
			int left = st.nextToken().charAt(0) - 'A';
			int right = st.nextToken().charAt(0) - 'A';
			
			arr[now] = new Node();
			if (left >= 0 && left < 26) {
				arr[now].left = left;
			} else {
				arr[now].left = -1;
			}

			if (right >= 0 && right < 26) {
				arr[now].right = right;
			} else {
				arr[now].right = -1;
			}

			
		}
		preorder(0);
		System.out.println();
		inorder(0);
		System.out.println();
		postorder(0);
	}

	static void inorder(int now) {
		if (now != -1) {
			inorder(arr[now].left);
			System.out.print((char) (now + 'A'));
			inorder(arr[now].right);
		}
	}
	
	static void preorder(int now) {
		if(now!=-1) {
			System.out.print((char)(now+'A'));
			preorder(arr[now].left);
			preorder(arr[now].right);
		}
	}
	static void postorder(int now) {
		if(now!=-1) {
			postorder(arr[now].left);
			postorder(arr[now].right);
			System.out.print((char)(now+'A'));
		}
	}

}
728x90

댓글