본문 바로가기

[BOJ] - JAVA

[백준] 1991 : 트리 순회 JAVA 풀이

 

import java.io.*;
import java.util.*;
public class Main {
	
	static class Node{
		char data;
		Node left;
		Node right;
		
		Node(char data){
			this.data = data;
		}
	}
	
	static int N;
	static Node[] arr;
	
	public static void main(String[] args)throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st;
		N = Integer.parseInt(br.readLine());
		
		// 노드의 배열 생성
		arr = new Node[N];
		// N개의 노드를 만듦
		for(int i=0;i<N;i++) arr[i] = new Node((char)('A'+i));
		
		
		for(int i=0;i<N;i++) {
			st = new StringTokenizer(br.readLine()," ");
			
			char parent = st.nextToken().charAt(0);
			char left = st.nextToken().charAt(0);
			char right = st.nextToken().charAt(0);
	
			// 입력된 값이 .이 아니면 왼쪽이나 오른쪽에 붙임
			if(left!='.') arr[parent-'A'].left = arr[left-'A'];
			if(right!='.') arr[parent-'A'].right = arr[right-'A'];
			
		}
		
		StringBuilder sb = new StringBuilder();
		
		sb.append(preorder(arr[0])).append('\n');
		sb.append(inorder(arr[0])).append('\n');
		sb.append(postorder(arr[0])).append('\n');
		
		System.out.println(sb);
	}
	
    // preorder는 부모 -> 왼쪽 -> 오른쪽
	static String preorder(Node node) {
		String str = "";
		str += node.data;
		if(node.left!=null) str += preorder(node.left);
		if(node.right!=null) str += preorder(node.right);
		return str;
	}
	
    // inorder 왼쪽 -> 부모 -> 오른쪽
	static String inorder(Node node) {
		String str = "";
		if(node.left!=null) str += inorder(node.left);
		str += node.data;
		if(node.right!=null) str += inorder(node.right);
		return str;
	}
    
    // preorder 왼쪽 -> 오른쪽 -> 부모
	static String postorder(Node node) {
		
		String str = "";
		if(node.left!=null) str += postorder(node.left);
		if(node.right!=null) str += postorder(node.right);
		str += node.data;
		
		return str;
	}
}