스터디사이트 : https://www.acmicpc.net/
JAVA 알고리즘 : 이진 검색 트리[백준 5639]
※ 문제 Url
https://www.acmicpc.net/problem/5639
※ 내가 푼 코드
해당 블로그댓글이나 아래 GitHubGist 코맨트에 여러분의 관심과 태클 얼마든지 환영합니다.
* First Attempt *
* Second Attempt *
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
/* First Attempt | |
11792KB / 252 MS | |
*/ | |
import java.util.Scanner; | |
class Node { | |
Node rightNode; | |
Node leftNode; | |
int value; | |
Node(int value) { | |
this.value = value; | |
} | |
} | |
public class Main{ | |
public static void main(String[] args) { | |
//// START : 노드에 값 입력. | |
Scanner scan = new Scanner(System.in); | |
int inputValue = scan.nextInt(); | |
Node node = new Node(inputValue); | |
while (scan.hasNext()) { | |
try { | |
inputValue = scan.nextInt(); | |
node = nodeInsert(node, inputValue); | |
} catch (Exception e) { | |
System.out.println("숫자만을 입력해야 합니다. 종료합니다."); | |
break; | |
} | |
} | |
//// END : 노드에 값 입력 | |
//// START : 후위순회 출력 | |
Main myClass = new Main(); | |
myClass.findNode(node); | |
//// END : 후외순회 출력 | |
} // end main method | |
public static Node nodeInsert(Node node, int inputValue) { | |
Node currentNode = null; | |
if (node == null) { | |
return new Node(inputValue); | |
} | |
if (node.value > inputValue) { | |
// leftNode로 추가 | |
currentNode = nodeInsert(node.leftNode, inputValue); | |
node.leftNode = currentNode; | |
} else if (node.value < inputValue) { | |
// rightNode로 추가 | |
currentNode = nodeInsert(node.rightNode, inputValue); | |
node.rightNode = currentNode; | |
} | |
return node; | |
} // end nodeCheck | |
public Node findNode(Node node) { | |
Node currentNode = null; | |
if (node.leftNode != null && node.rightNode != null) { | |
node.leftNode = findNode(node.leftNode); | |
node.rightNode = findNode(node.rightNode); | |
} | |
if(node.leftNode == null && node.rightNode == null){ | |
System.out.println(node.value); | |
node = null; | |
}else if(node.leftNode==null && node.rightNode!=null){ | |
findNode(node.rightNode); | |
System.out.println(node.value); | |
node = null; | |
}else if(node.leftNode!=null && node.rightNode==null){ | |
findNode(node.leftNode); | |
System.out.println(node.value); | |
node = null; | |
} | |
return node; | |
} | |
} |
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
/* Second Attempt | |
10780KB / 330 MS | |
*/ | |
import java.util.Scanner; | |
class Node { | |
Node rightNode; | |
Node leftNode; | |
int value; | |
Node(int value) { | |
this.value = value; | |
} | |
} | |
public class Main{ | |
StringBuilder nodesb = new StringBuilder(); | |
public StringBuilder getNodesb() { | |
return nodesb; | |
} | |
public void setNodesb(StringBuilder nodesb) { | |
this.nodesb = nodesb; | |
} | |
public static void main(String[] args) { | |
//// START : 노드에 값 입력. | |
Scanner scan = new Scanner(System.in); | |
int inputValue = scan.nextInt(); | |
Node node = new Node(inputValue); | |
while (scan.hasNext()) { | |
try { | |
inputValue = scan.nextInt(); | |
node = nodeInsert(node, inputValue); | |
} catch (Exception e) { | |
// e.printStackTrace(); | |
System.out.println("숫자만을 입력해야 합니다. 종료합니다."); | |
break; | |
} | |
} | |
//// END : 노드에 값 입력 | |
//// START : 후위순회 출력 | |
Main myClass = new Main(); | |
StringBuilder resultsb = myClass.getNodesb(); | |
myClass.findNode(node); | |
System.out.println(resultsb); | |
//// END : 후외순회 출력 | |
} // end main method | |
public static Node nodeInsert(Node node, int inputValue) { | |
Node currentNode = null; | |
if (node == null) { | |
return new Node(inputValue); | |
} | |
if (node.value > inputValue) { | |
// leftNode로 추가 | |
currentNode = nodeInsert(node.leftNode, inputValue); | |
node.leftNode = currentNode; | |
} else if (node.value < inputValue) { | |
// rightNode로 추가 | |
currentNode = nodeInsert(node.rightNode, inputValue); | |
node.rightNode = currentNode; | |
} | |
return node; | |
} // end nodeCheck | |
public Node findNode(Node node) { | |
Node currentNode = null; | |
if (node.leftNode != null && node.rightNode != null) { | |
node.leftNode = findNode(node.leftNode); | |
node.rightNode = findNode(node.rightNode); | |
} | |
if(node.leftNode == null && node.rightNode == null){ | |
nodesb.append(node.value + "\n"); | |
node = null; | |
}else if(node.leftNode==null && node.rightNode!=null){ | |
findNode(node.rightNode); | |
nodesb.append(node.value + "\n"); | |
node = null; | |
}else if(node.leftNode!=null && node.rightNode==null){ | |
findNode(node.leftNode); | |
nodesb.append(node.value + "\n"); | |
node = null; | |
} | |
setNodesb(nodesb); | |
return node; | |
} | |
} |
'JAVA > JAVA 자료구조 알고리즘' 카테고리의 다른 글
JAVA 알고리즘 : 줄 세우기[백준 2252] (0) | 2017.06.03 |
---|---|
JAVA 알고리즘 : 섬의 개수[백준 4963] (0) | 2017.04.26 |
JAVA 알고리즘 : 셀프 넘버[백준 4673] (0) | 2017.04.19 |
JAVA 알고리즘 : 소수 판별하기 (0) | 2016.08.17 |
JAVA 자료구조 : 이진검색트리 중복노드 제거하기 (0) | 2016.08.16 |