Skip to content

Commit a74f999

Browse files
update 270
1 parent b6e799f commit a74f999

File tree

1 file changed

+6
-87
lines changed
  • src/main/java/com/fishercoder/solutions

1 file changed

+6
-87
lines changed

Diff for: src/main/java/com/fishercoder/solutions/_270.java

+6-87
Original file line numberDiff line numberDiff line change
@@ -5,96 +5,15 @@
55
public class _270 {
66

77
public static class Solution1 {
8-
//A general tree solution, this finished in 1 ms
98
public int closestValue(TreeNode root, double target) {
10-
if (root == null) {
11-
return 0;
12-
}
13-
double delta = Double.MAX_VALUE;
14-
return dfs(root, target, delta, root.val);
15-
}
16-
17-
private int dfs(TreeNode root, double target, double delta, int closestVal) {
18-
if (Math.abs(root.val - target) < delta) {
19-
closestVal = root.val;
20-
delta = Math.abs(root.val - target);
21-
}
22-
int leftVal = closestVal;
23-
if (root.left != null) {
24-
leftVal = dfs(root.left, target, delta, closestVal);
25-
}
26-
int rightVal = closestVal;
27-
if (root.right != null) {
28-
rightVal = dfs(root.right, target, delta, closestVal);
29-
}
30-
return (Math.abs(leftVal - target) > Math.abs(rightVal - target)) ? rightVal : leftVal;
31-
}
32-
}
33-
34-
public static class Solution2 {
35-
// BST solution
36-
// we can tailor the solution to use the BST feature: left subtrees are always smaller than the root the right subtrees
37-
//this finished in 0 ms
38-
public int closestValue(TreeNode root, double target) {
39-
if (root == null) {
40-
return 0;
41-
}
42-
return dfs(root, target, root.val);
43-
}
44-
45-
private int dfs(TreeNode root, double target, int minVal) {
46-
if (root == null) {
47-
return minVal;
48-
}
49-
if (Math.abs(root.val - target) < Math.abs(minVal - target)) {
50-
minVal = root.val;
51-
}
52-
if (target < root.val) {
53-
minVal = dfs(root.left, target, minVal);
54-
} else {
55-
minVal = dfs(root.right, target, minVal);
56-
}
57-
return minVal;
58-
}
59-
}
60-
61-
public static class Solution3 {
62-
//a more concise solution
63-
public int closestValue(TreeNode root, double target) {
64-
if (root == null) {
65-
return 0;
66-
}
67-
return dfs(root, target, root.val);
68-
}
69-
70-
private int dfs(TreeNode root, double target, int minVal) {
71-
if (root == null) {
72-
return minVal;
73-
}
74-
if (Math.abs(root.val - target) < Math.abs(minVal - target)) {
75-
minVal = root.val;
76-
}
77-
minVal = dfs(root.left, target, minVal);
78-
minVal = dfs(root.right, target, minVal);
79-
return minVal;
80-
}
81-
}
82-
83-
public static class Solution4 {
84-
//BST iterative solution
85-
public int closestValue(TreeNode root, double target) {
86-
long minVal = Long.MAX_VALUE;
9+
int val;
10+
int closest = root.val;
8711
while (root != null) {
88-
if (Math.abs(root.val - target) < Math.abs(minVal - target)) {
89-
minVal = root.val;
90-
}
91-
if (target < root.val) {
92-
root = root.left;
93-
} else {
94-
root = root.right;
95-
}
12+
val = root.val;
13+
closest = Math.abs(val - target) < Math.abs(closest - target) || (Math.abs(val - target) == Math.abs(closest - target) && val < closest) ? val : closest;
14+
root = target < root.val ? root.left : root.right;
9615
}
97-
return minVal == Long.MAX_VALUE ? 0 : (int) minVal;
16+
return closest;
9817
}
9918
}
10019
}

0 commit comments

Comments
 (0)