티스토리 뷰
트리를 순회하는 방법을
전위 순회, 루트 -> 왼쪽 -> 오른쪽
중위 순회, 왼쪽 -> 루트 -> 오른쪽
후위 순회, 왼쪽 -> 오른쪽 -> 루트
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.io.BufferedReader; | |
import java.io.InputStreamReader; | |
/** | |
* 백준 온라인 저지 | |
* 1991 | |
* 트리순회 | |
* | |
* @author whitebeard-k | |
* | |
*/ | |
public class Problem1991 { | |
public static void main(String[] args) throws Exception { | |
BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); | |
int i, n = Integer.parseInt(in.readLine()); | |
char[] data = in.readLine().replaceAll(" ", "").toCharArray(); | |
Tree t = new Tree(data[0], data[1], data[2]); | |
for (i = 1; i < n; i++) { | |
data = in.readLine().replaceAll(" ", "").toCharArray(); | |
t.add(data[0], data[1], data[2]); | |
} | |
t.preOrder(t.root); | |
System.out.println(); | |
t.inOrder(t.root); | |
System.out.println(); | |
t.postOrder(t.root); | |
} | |
} | |
class TreeNode { | |
char data; | |
TreeNode left; | |
TreeNode right; | |
public TreeNode(char data) { | |
this.data = data; | |
} | |
} | |
class Tree { | |
TreeNode root; | |
public Tree(char data, char left, char right) { | |
root = new TreeNode(data); | |
if (data != '.') | |
root = new TreeNode(data); | |
if (left != '.') | |
root.left = new TreeNode(left); | |
if (right != '.') | |
root.right = new TreeNode(right); | |
} | |
public void add(char data, char left, char right) { | |
next(root.left, data, left, right); | |
next(root.right, data, left, right); | |
} | |
public void next(TreeNode node, char data, char left, char right) { | |
if (node == null) | |
return; | |
if (node.data == data) { | |
if (left != '.') | |
node.left = new TreeNode(left); | |
if (right != '.') | |
node.right = new TreeNode(right); | |
} else { | |
next(node.left, data, left, right); | |
next(node.right, data, left, right); | |
} | |
} | |
// 전위 순회, 루트 -> 왼쪽 -> 오른쪽 | |
public void preOrder(TreeNode node) { | |
System.out.print(node.data); | |
if (node.left != null) | |
preOrder(node.left); | |
if (node.right != null) | |
preOrder(node.right); | |
} | |
// 중위 순회, 왼쪽 -> 루트 -> 오른쪽 | |
public void inOrder(TreeNode node) { | |
if (node.left != null) | |
inOrder(node.left); | |
System.out.print(node.data); | |
if (node.right != null) | |
inOrder(node.right); | |
} | |
// 후위 순회, 왼쪽 -> 오른쪽 -> 루트 | |
public void postOrder(TreeNode node) { | |
if (node.left != null) | |
postOrder(node.left); | |
if (node.right != null) | |
postOrder(node.right); | |
System.out.print(node.data); | |
} | |
} |
반응형
'알고리즘 > 백준' 카테고리의 다른 글
[백준][dp] 11066 파일합치기 (0) | 2018.01.24 |
---|---|
[백준][그래프] 11403 경로찾기 (0) | 2018.01.24 |
[백준][DP] 1149 RGB 거리 (0) | 2017.11.15 |
[백준][DP] 5721 사탕줍기 대회 (0) | 2017.10.26 |
[백준] 1504 특정한 최단 경로 (0) | 2017.10.25 |
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- nodejs
- java
- S3
- 백준
- 정올
- AWS
- SQL
- oozie
- HDFS
- error
- Tez
- airflow
- emr
- ubuntu
- 알고리즘
- 하둡
- HIVE
- 오류
- 파이썬
- mysql
- build
- bash
- Python
- 하이브
- 다이나믹
- SPARK
- Linux
- hbase
- Hadoop
- yarn
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
글 보관함