-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathQ5.java
97 lines (84 loc) ยท 3.74 KB
/
Q5.java
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
package ch04;
import java.util.ArrayList;
import java.util.List;
/**
* 4.5. BST ๊ฒ์ฆ: ์ด์ง ํธ๋ฆฌ๊ฐ ์ด์ง ํ์ ํธ๋ฆฌ์ธ์ง ํ์ธํ๊ธฐ
*
* #35. ์ค์ ์ํ ์ดํ ๋ชจ๋ ์์์ ์์๊ฐ ์ ๋๋ก ๋ฐฐ์ด๋์ด ์๋ค๋ฉด, ํธ๋ฆฌ๊ฐ ์ ๋๋ก ๋ ์์๋ก ๋ฐฐ์ด๋์๋ค๊ณ ๋งํ ์ ์๋๊ฐ?
* ์์๊ฐ ์ค๋ณต๋๋ฉด ์ด๋ป๊ฒ ๋๋๊ฐ? ์์์ ์ค๋ณต์ ํ์ฉํ๋ค๋ฉด, ์ค๋ณต๋ ์์๋ ๋ชจ๋ ํ์ชฝ(๋ณดํต ์ผ์ชฝ)์ ๋์ฌ์ผ ํ๋ค.
* #57. ์ผ์ชฝ์ ๋ชจ๋ ๋
ธ๋๊ฐ ํ์ฌ ๋
ธ๋๋ณด๋ค ์์์ผ ํ๊ณ , ํ์ฌ ๋
ธ๋๋ ์ค๋ฅธ์ชฝ์ ๋ชจ๋ ๋
ธ๋๋ณด๋ค ์์์ผ ํ๋ค.
* #86. ์ผ์ชฝ์ ๋ชจ๋ ๋
ธ๋๊ฐ ํ์ฌ ๋
ธ๋๋ณด๋ค ์๊ฑฐ๋ ๊ฐ๋ค๋ฉด, ์ผ์ชฝ์์ ๊ฐ์ฅ ํฐ ๋
ธ๋๊ฐ ํ์ฌ ๋
ธ๋๋ณด๋ค ์๊ฑฐ๋ ๊ฐ๋ค๋ ๋ป์ด๋ค.
* #113. leftTree.max์ rightTree.min์ ๋ํด ํ์ฌ์ ๊ฐ์ ๊ฒ์ฆํ๋ ๋์
* ์ด ๋ก์ง์ ๋ค์ง์ด์ ์๊ฐํด ๋ณผ ์ ์์๊น? ํธ๋ฆฌ ์ผ์ชฝ์ ๋
ธ๋๊ฐ current.value๋ณด๋ค ์์์ง๋ฅผ ๊ฒ์ฆํด๋ผ.
* #128. checkBST๋ผ๋ ์ฌ๊ท ํจ์๋ฅผ ์๊ฐํด ๋ณด์. ์ด ํจ์๋ ๊ฐ๊ฐ์ ๋
ธ๋๊ฐ (min, max) ์์ญ ์์ ์๋์ง ํ์ธํ๋ค.
* ์ฒ์์ ์ด ์์ญ์ ์ ํ์ ๋ฌดํ๋์ด๋ค. ์ผ์ชฝ์ผ๋ก ํ์ํ ๋ min์ ์์ ๋ฌดํ๋์ด๊ณ max๋ root.value๊ฐ ๋๋ค.
* ํธ๋ฆฌ๋ฅผ ํ์ํ๋ฉด์ ์ด ์์ญ์ ์ ์ ํ๊ฒ ์กฐ์ ํ๋ ์ฌ๊ท ํจ์๋ฅผ ์์ฑํ ์ ์๋๊ฐ?
*/
public class Q5 {
public static void main(String[] args) {
TreeNode left = new TreeNode(4, new TreeNode(2), new TreeNode(12));
TreeNode right = new TreeNode(10, null, new TreeNode(20));
TreeNode root = new TreeNode(8, left, right);
Q5 q5 = new Q5();
System.out.println(q5.isBST(root));
}
// Solution 1. In-order traversal
// - time: O(N)
// - space: O(N)
// - ๋ฌธ์ ์ : ํธ๋ฆฌ ์์ ์ค๋ณต๋ ๊ฐ์ด ์๋ ๊ฒฝ์ฐ ์ฒ๋ฆฌ ๋ถ๊ฐ
// ์: root(20) - right(20) -> ์๋ชป๋ ํธ๋ฆฌ
public boolean solution_checkBST_inOrder(TreeNode root) {
List<Integer> arr = new ArrayList<>();
solution_copyBST(root, arr);
for (int i = 1; i < arr.size(); i++) {
if (arr.get(i) <= arr.get(i)) {
return false;
}
}
return true;
}
private void solution_copyBST(TreeNode root, List<Integer> arr) {
if (root == null) {
return;
}
solution_copyBST(root.left, arr);
arr.add(root.value);
solution_copyBST(root.right, arr);
}
// Solution 2. left <= current < right
// - time: O(N)
// - space: (๊ท ํ ์กํ ํธ๋ฆฌ์์) ํธ๋ฆฌ์ ๊น์ด ๋งํผ ์ฌ๊ท ํธ์ถ์ ์ํํ๋ฏ๋ก O(logN)
public boolean solution_checkBST(TreeNode root) {
return solution_checkBST(root, null, null);
}
private boolean solution_checkBST(TreeNode root, Integer min, Integer max) {
if (root == null) {
return true;
}
if ((min != null && root.value <= min) || (max != null && root.value > max)) {
return false;
}
if (!solution_checkBST(root.left, min, root.value) || !solution_checkBST(root.right, root.value, max)) {
return false;
}
return true;
}
// Method 1. In-order traversal
public boolean isBST(TreeNode root) {
List<Integer> list = new ArrayList<>();
inOrderTraverse(root, list);
for (int i = 0; i < list.size() - 1; i++) {
if (list.get(i) > list.get(i + 1)) {
return false;
}
}
return true;
}
private void inOrderTraverse(TreeNode root, List<Integer> list) {
if (root != null) {
inOrderTraverse(root.left, list);
list.add(root.value);
inOrderTraverse(root.right, list);
}
}
}