알고리즘/트리
백준 5639번 : 이진 검색 트리 java
LDY3838
2022. 5. 30. 15:13
반응형
이 문제는 값을 입력을 받아 이진트리를 만드는 문제입니다.
전위 순회, 후위 순회에 대한 자료는 아래의 글에서 확인하실 수 있습니다.
백준 1991번 : 트리 순회 java
이 문제는 트리를 만들어서 노드를 삽입 후 전위 순회, 중위 순회, 후위 순회한 결과를 출력하는 문제입니다. 전위 순회와 중위 순회, 후위 순회에 대한 설명은 네이버 백과사전에 자세히 나와있
dy-coding.tistory.com
바로 소스 코드를 확인하도록 하겠습니다.
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라는 하나의 함수로
구현하였습니다.
반응형