본문 바로가기
온라인 저지/BOJ

[BOJ/Java] 1991 트리 순회

by ahj 2022. 2. 6.

재귀 연습하려고 풀었다가 이진트리까지 공부했다..^^

입력 출력
7
A B C
B D .
C E F
E . .
F . G
D . .
G . .
ABDCEFG
DBAECFG
DBEGFCA

 

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Main {
	static StringBuilder ans = new StringBuilder();

	static class Node {
		char data;
		Node left, right;

		Node(char data) {
			this.data = data;
		}
	}

	static class Tree {
		Node root;

		public void addNode(char data, char left, char right) {
			if (root == null) root = new Node(data);
			addNode(root, data, left, right);
		}

		public void addNode(Node node, char data, char left, char right) {
			if (node == null) return;
			else if (node.data == data) {
				if (left != '.') node.left = new Node(left);
				if (right != '.') node.right = new Node(right);
			} else {
				addNode(node.left, data, left, right);
				addNode(node.right, data, left, right);
			}
		}

		public void preorder(Node node) {
			if (node != null) {
				ans.append(node.data);
				preorder(node.left);
				preorder(node.right);
			}
		}

		public void inorder(Node node) {
			if (node != null) {
				inorder(node.left);
				ans.append(node.data);
				inorder(node.right);
			}
		}

		public void postorder(Node node) {
			if (node != null) {
				postorder(node.left);
				postorder(node.right);
				ans.append(node.data);
			}
		}
	}

	public static void main(String[] args) throws Exception {
		BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

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

		Tree tree = new Tree();
		char[] temp;
		for (int i = 0; i < n; i++) {
			temp = in.readLine().replaceAll(" ", "").toCharArray();
			tree.addNode(temp[0], temp[1], temp[2]);
		}
		in.close();

		tree.preorder(tree.root);
		ans.append("\n");
		tree.inorder(tree.root);
		ans.append("\n");
		tree.postorder(tree.root);
		System.out.println(ans);
	}
}

이진 트리를 이해는 했는데, 입력받아서 구현하는 방법이 아이디어가 떠오르지 않았다. 검색을 해서 공부해보니 method를 통해서 입력 받고 node 생성하는 방법, if로 left, right 값을 확인하고 node 생성하기 등의 아이디어를 받아올 수 있었다. 여기서 좀 더 간결하게 발전 시켜 보고 싶어서 괜히 method overloading으로 구현해봤다. 후후

'온라인 저지 > BOJ' 카테고리의 다른 글

[BOJ/Java] 2493 탑  (0) 2022.02.09
[BOJ/Java] 1966 프린터 큐  (0) 2022.02.09
[BOJ/Java] 17478 재귀함수가 뭔가요?  (0) 2022.02.03
[BOJ/Node.js] 1786 찾기  (0) 2022.01.30
[BOJ/Java] 2309 일곱 난쟁이  (0) 2022.01.23

댓글