백준 1991번 트리순회
잊어버리지 않기 위해 남겨두는
import java.util.*;
import java.io.*;
class Node {
String data;
Node left;
Node right;
Node(String data) {
this.data = data;
}
}
public class Main {
static Node root=null;
static String result="";
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input = br.readLine();
int n = Integer.parseInt(input);
for(int i=0;i<n;i++) {
input = br.readLine();
String[] s = input.split(" ");
createNode(s[0], s[1], s[2]);
}
preorder(root);
System.out.println(result);
result="";
inorder(root);
System.out.println(result);
result="";
postorder(root);
System.out.println(result);
}
static void createNode(String data, String left, String right) {
if(root==null) {
root = new Node(data);
if(!left.equals(".")) {
root.left = new Node(left);
}
if(!right.equals(".")) {
root.right = new Node(right);
}
} else {
searchNode(root, data, left, right);
}
}
static void searchNode(Node start, String data, String left, String right) {
if(start == null) {
return;
}
if(start.data.equals(data)) {
if(!left.equals(".")) {
start.left = new Node(left);
}
if(!right.equals(".")) {
start.right = new Node(right);
}
} else {
searchNode(start.left, data, left, right);
searchNode(start.right, data, left, right);
}
}
static void preorder(Node start) { //전위순회
result += start.data;
if(start.left!=null) {
preorder(start.left);
}
if(start.right!=null) {
preorder(start.right);
}
}
static void inorder(Node start) { //중위순회
if(start.left!=null) {
inorder(start.left);
}
result += start.data;
if(start.right!=null) {
inorder(start.right);
}
}
static void postorder(Node start) { //후위순회
if(start.left!=null) {
postorder(start.left);
}
if(start.right!=null) {
postorder(start.right);
}
result += start.data;
}
}
'알고리즘' 카테고리의 다른 글
코딩테스트 알고리즘 정리 (0) | 2024.12.18 |
---|