코딩테스트/백준

[Java] 백준 1991 : 트리 순회

플래시🦥 2023. 2. 7.

목차

반응형

 

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

1991번: 트리 순회

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

www.acmicpc.net


import java.io.*;

public class Main {
	
	static class Node{
		char value;
		Node left;
		Node right;
		
		Node(char value, Node left, Node right){
			this.value = value;
			this.left = left;
			this.right = right;
		}
	}//class Node
	
	static int N;
	static Node head = new Node('A',null,null);
	
	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		N = Integer.parseInt(br.readLine());	//노드의 개수 
		
		for(int i=0;i<N;i++) {
			String [] str = br.readLine().split(" ");
			char root = str[0].charAt(0);
			char left = str[1].charAt(0);
			char right = str[2].charAt(0);
			insertNode(head,root,left,right);
		}
		
		preOrder(head);
		System.out.println();
		inOrder(head);
		System.out.println();
		postOrder(head);
	
	}// main()
	
	static void insertNode(Node tmp, char root,char left, char right) {
		//루트노드(A)인가?
		if(tmp.value==root) {
			//자식노드가 . 이면 null이고 아니면 새로운 노트 만들어준다.
			tmp.left=(left=='.'? null:new Node(left,null,null));
			tmp.right=(right=='.'? null:new Node(right,null,null));
		}
		else {
			if(tmp.left != null) insertNode(tmp.left, root, left, right);
			if(tmp.right != null) insertNode(tmp.right, root, left, right);
		}
	}//insertNode()
			
	static void preOrder(Node n) {
		if(n==null)	return;
		System.out.print(n.value);
		preOrder(n.left);
		preOrder(n.right);
		
	}//preOrder()
	static void inOrder(Node n) {
		if(n==null)	return;
		inOrder(n.left);
		System.out.print(n.value);
		inOrder(n.right);
		
	}//inOrder()
	static void postOrder(Node n) {
		if(n==null)	return;
		postOrder(n.left);
		postOrder(n.right);
		System.out.print(n.value);
		
	}//postOrder()
	 
}// class Main
728x90
반응형

댓글