반응형
이 문제는 값을 입력을 받아 이진트리를 만드는 문제입니다.
전위 순회, 후위 순회에 대한 자료는 아래의 글에서 확인하실 수 있습니다.
바로 소스 코드를 확인하도록 하겠습니다.
import java.io.*;
public class Main{
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
Tree tree = new Tree();
while(true){
String input = br.readLine();
if(input == null)
break;
int num = Integer.parseInt(input);
tree.createNode(new Node(num));
}
tree.postOrder();
}
}
class Tree{
Node root;
void createNode(Node node){
if(root == null)
root = node;
else
createNode(root, node);
}
void createNode(Node node, Node newNode){
if(node.data<newNode.data){
if(node.right == null)
node.right = newNode;
else
createNode(node.right, newNode);
}
else{
if(node.left == null)
node.left = newNode;
else
createNode(node.left, newNode);
}
}
void postOrder(){
postOrder(root);
}
void postOrder(Node node){
if(node.left != null)
postOrder(node.left);
if(node.right != null)
postOrder(node.right);
System.out.println(node.data);
}
}
class Node{
Node left, right;
int data;
Node(int data){
this.data = data;
}
}
이 문제도 위에 있는 링크인 1991번과 유사합니다.
다만 조금 주의하셔야 하는 부분은 main 함수 안의 아래와 같은 코드입니다.
while(true){
String input = br.readLine();
if(input == null)
break;
int num = Integer.parseInt(input);
tree.createNode(new Node(num));
}
이 문제는 입력할 때 종료 조건이 빈 문장을 넣는 것입니다.
따라서 input이 들어오지 않아 null이 된다면 종료시켜 주시면 됩니다.
또한 이 문제를 풀 때 1991번에서는 createNode와 find 함수를 이용하였었습니다.
하지만 createNode와 find 함수의 차이점이 없다고 저는 느꼈고 오버로딩을 이용하여 createNode라는 하나의 함수로
구현하였습니다.
반응형
'알고리즘 > 트리' 카테고리의 다른 글
백준 1068번 : 트리 java (0) | 2022.06.26 |
---|---|
백준 1647번 : 도시 분할 계획 java (0) | 2022.06.19 |
백준 1922번 : 네트워크 연결 java (0) | 2022.06.18 |
백준 1991번 : 트리 순회 java (0) | 2022.05.30 |
댓글