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
|
import java.util.*;
class Solution {
public static void Connect(Node parent, Node child) {
if (parent.x > child.x) {
if (parent.left == null) {
parent.left = child;
} else {
Connect(parent.left, child);
}
} else {
if (parent.right == null) {
parent.right = child;
} else {
Connect(parent.right, child);
}
}
}
public static void preOrder(Node node, ArrayList<Integer> order) {
if (node == null)
return;
order.add(node.data);
preOrder(node.left, order);
preOrder(node.right, order);
}
public static void postOrder(Node node, ArrayList<Integer> order) {
if (node == null)
return;
postOrder(node.left, order);
postOrder(node.right, order);
order.add(node.data);
}
public int[][] solution(int[][] nodeinfo) {
int[][] answer = new int[2][];
// 노드 초기화
ArrayList<Node> list = new ArrayList<Node>();
for (int i = 0; i < nodeinfo.length; i++) {
list.add(new Node(i + 1, nodeinfo[i][0], nodeinfo[i][1]));
}
// y 내림차순 정렬
Collections.sort(list, new Comparator<Node>() {
@Override
public int compare(Node o1, Node o2) {
return o2.y - o1.y;
}
});
Node root = list.get(0);
// 노드 연결
for (int i = 1; i < list.size(); i++) {
Connect(root, list.get(i));
}
// 순회 저장
ArrayList<Integer> order = new ArrayList<Integer>();
preOrder(root, order);
answer[0] = order.stream().mapToInt(Integer::intValue).toArray();
order.clear();
postOrder(root, order);
answer[1] = order.stream().mapToInt(Integer::intValue).toArray();
return answer;
}
}
class Node {
int data;
int x, y;
Node left, right;
Node(int data, int x, int y) {
this.data = data;
this.x = x;
this.y = y;
}
}
|
cs |
노드를 연결하는 과정이 어려웠다.
하지만 단순하게 생각하여 루트부터 자식노드 끝까지 타고 내려간 후 삽입하면 된다.
참고 사이트 : https://minhamina.tistory.com/107
'Programmers > Level3' 카테고리의 다른 글
풍선 터트리기 (0) | 2021.09.13 |
---|---|
[1차] 추석 트래픽 (0) | 2021.09.08 |
자물쇠와 열쇠 (0) | 2021.08.26 |
징검다리 건너기 (0) | 2021.08.26 |
N으로 표현 (0) | 2021.08.25 |