Skip to content

Commit d1289f1

Browse files
authored
Merge pull request #656 from who-hoo/ikjo93-patch-89
[익조] 20221210 "백준 - 이가 빠진 이진 트리" 풀이 제출
2 parents 86a2525 + a072583 commit d1289f1

File tree

1 file changed

+104
-0
lines changed

1 file changed

+104
-0
lines changed

익조/20221210.java

Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
import java.io.BufferedReader;
2+
import java.io.IOException;
3+
import java.io.InputStreamReader;
4+
import java.util.Arrays;
5+
import java.util.StringTokenizer;
6+
7+
class Main {
8+
9+
static int[] nodes;
10+
static StringBuilder result = new StringBuilder();
11+
12+
public static void main(String[] args) throws IOException {
13+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
14+
int n = Integer.parseInt(br.readLine()), deleteIndex = 0;
15+
nodes = new int[n];
16+
StringTokenizer st = new StringTokenizer(br.readLine());
17+
for (int i = 0; i < n; i++) {
18+
nodes[i] = Integer.parseInt(st.nextToken());
19+
if (nodes[i] == -1) {
20+
deleteIndex = i;
21+
}
22+
}
23+
24+
nodes[deleteIndex] = Integer.parseInt(br.readLine());
25+
26+
Arrays.sort(nodes);
27+
28+
int mid = n / 2;
29+
Node root = new Node(nodes[mid]);
30+
dc(root, 0, mid - 1);
31+
dc(root, mid + 1, n - 1);
32+
33+
postOrder(root);
34+
System.out.println(result);
35+
}
36+
37+
private static void dc(Node root, int start, int end) {
38+
if (start == end) {
39+
root.add(nodes[start]);
40+
return;
41+
}
42+
43+
int mid = (start + end) / 2;
44+
root.add(nodes[mid]);
45+
dc(root, start, mid - 1);
46+
dc(root, mid + 1, end);
47+
}
48+
49+
private static void postOrder(Node node) {
50+
if (node == null) {
51+
return;
52+
}
53+
54+
postOrder(node.leftChild);
55+
postOrder(node.rightChild);
56+
result.append(node.value).append(" ");
57+
}
58+
59+
private static class Node {
60+
int value;
61+
Node leftChild;
62+
Node rightChild;
63+
64+
Node(int value) {
65+
this.value = value;
66+
}
67+
68+
public Node add(int value) {
69+
if (this.value > value) {
70+
return addLeft(value);
71+
} else if (this.value < value){
72+
return addRight(value);
73+
} else {
74+
return null;
75+
}
76+
}
77+
78+
private Node addLeft(int value) {
79+
if (leftChild == null) {
80+
leftChild = new Node(value);
81+
return leftChild;
82+
}
83+
84+
if (leftChild.value > value) {
85+
return leftChild.addLeft(value);
86+
} else {
87+
return leftChild.addRight(value);
88+
}
89+
}
90+
91+
private Node addRight(int value) {
92+
if (rightChild == null) {
93+
rightChild = new Node(value);
94+
return rightChild;
95+
}
96+
97+
if (rightChild.value > value) {
98+
return rightChild.addLeft(value);
99+
} else {
100+
return rightChild.addRight(value);
101+
}
102+
}
103+
}
104+
}

0 commit comments

Comments
 (0)