-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathBinTreeTester.java
More file actions
114 lines (97 loc) · 2.75 KB
/
Copy pathBinTreeTester.java
File metadata and controls
114 lines (97 loc) · 2.75 KB
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
package tree;
import java.util.Scanner;
// BinTree.java인 이진검색트리를 이용하는 프로그램
public class BinTreeTester {
static Scanner stdIn = new Scanner(System.in);
// 데이터(회원번호 + 이름)
static class Data {
public static final int NO = 1; // 번호를 입력받을 경우
public static final int NAME = 2; // 이름을 입력받을 경우
private Integer no; // 회원번호(키 값)
private String name; // 이름
// 키 값
Integer keyCode() {
return no;
}
//문자열 반환
public String toString() {
return name;
}
// 데이터 입력
void scanData(String guide, int sw) {
System.out.println(guide + "할 데이터를 입력하세요.");
if((sw & NO) == NO) {
System.out.print("번호 : ");
no = stdIn.nextInt();
}
if((sw & NAME) == NAME) {
System.out.print("이름 : ");
name = stdIn.next();
}
}
}
// 메뉴 열거형
enum Menu {
ADD( "삽입"),
REMOVE( "삭제"),
SEARCH( "검색"),
PRINT( "표시"),
TERMINATE("종료");
private final String message; // 출력할 문자열
static Menu MenuAt(int idx) { // 서수가 idx인 열거를 반환
for(Menu m : Menu.values())
if(m.ordinal() == idx)
return m;
return null;
}
Menu(String string) { // 생성자
message = string;
}
String getMessage() { // 출력할 문자열 반환
return message;
}
}
// 메뉴 선택
static Menu SelectMenu() {
int key;
do {
for(Menu m : Menu.values())
System.out.printf("(%d) %s ", m.ordinal(), m.getMessage());
System.out.print(" : ");
key = stdIn.nextInt();
} while(key < Menu.ADD.ordinal() || key > Menu.TERMINATE.ordinal());
return Menu.MenuAt(key);
}
@SuppressWarnings("incomplete-switch")
public static void main(String[] args) {
Menu menu; // 메뉴
Data data; // 추가용 데이터 참조
Data ptr; // 검색용 데이터 참조
Data temp = new Data(); // 입력용 데이터
BinTree<Integer, Data> tree = new BinTree<Integer, Data>();
do {
switch(menu = SelectMenu()) {
case ADD: // 노드 삽입
data = new Data();
data.scanData("삽입", Data.NO | Data.NAME);
tree.add(data.keyCode(), data);
break;
case REMOVE : // 노드 삭제
temp.scanData("삭제", Data.NO);
tree.remove(temp.keyCode());
break;
case SEARCH : // 노드 검색
temp.scanData("검색", Data.NO);
ptr = tree.search(temp.keyCode());
if(ptr != null)
System.out.println("그 번호의 이름은 " + ptr + "입니다.");
else
System.out.println("해당 데이터가 없습니다.");
break;
case PRINT : // 모든 노드를 키 값의 오름차순으로 출력
tree.print();
break;
}
} while(menu != Menu.TERMINATE);
}
}