Skip to content

Commit 8ab9c88

Browse files
committed
solve problem Minimum Absolute Difference In Bst
1 parent 3768280 commit 8ab9c88

File tree

5 files changed

+108
-0
lines changed

5 files changed

+108
-0
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ All solutions will be accepted!
7070
|575|[Distribute Candies](https://leetcode-cn.com/problems/distribute-candies/description/)|[java/py/js](./algorithms/DistributeCandies)|Easy|
7171
|21|[Merge Two Sorted Lists](https://leetcode-cn.com/problems/merge-two-sorted-lists/description/)|[java/py/js](./algorithms/MergeTwoSortedLists)|Easy|
7272
|88|[Merge Sorted Array](https://leetcode-cn.com/problems/merge-sorted-array/description/)|[java/py/js](./algorithms/MergeSortedArray)|Easy|
73+
|530|[Minimum Absolute Difference In Bst](https://leetcode-cn.com/problems/minimum-absolute-difference-in-bst/description/)|[java/py/js](./algorithms/MinimumAbsoluteDifferenceInBst)|Easy|
7374

7475
# Database
7576
|#|Title|Solution|Difficulty|
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
# Minimum Absolute Difference In Bst
2+
This problem is easy to solve by inorder traversal
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
/**
2+
* Definition for a binary tree node.
3+
* public class TreeNode {
4+
* int val;
5+
* TreeNode left;
6+
* TreeNode right;
7+
* TreeNode(int x) { val = x; }
8+
* }
9+
*/
10+
class Solution {
11+
public int getMinimumDifference(TreeNode root) {
12+
List<TreeNode> stack = new ArrayList<TreeNode>();
13+
List<Integer> values = new ArrayList<Integer>();
14+
Map<TreeNode, Boolean> traveredMap = new HashMap<TreeNode, Boolean>();
15+
int minDiff = Integer.MAX_VALUE;
16+
17+
stack.add(root);
18+
while (stack.size() > 0) {
19+
int lastIndex = stack.size() - 1;
20+
TreeNode node = stack.get(lastIndex);
21+
if (node.left != null && traveredMap.get(node) == null) {
22+
traveredMap.put(node, true);
23+
stack.add(node.left);
24+
} else {
25+
stack.remove(lastIndex);
26+
values.add(node.val);
27+
if (node.right != null) {
28+
stack.add(node.right);
29+
}
30+
}
31+
}
32+
for (int i = 1; i < values.size(); i++) {
33+
minDiff = Math.min(minDiff, values.get(i) - values.get(i - 1));
34+
}
35+
return minDiff;
36+
}
37+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
/**
2+
* Definition for a binary tree node.
3+
* function TreeNode(val) {
4+
* this.val = val;
5+
* this.left = this.right = null;
6+
* }
7+
*/
8+
/**
9+
* @param {TreeNode} root
10+
* @return {number}
11+
*/
12+
var getMinimumDifference = function(root) {
13+
let stack = [root],
14+
values = [],
15+
minDiff = null
16+
17+
while (stack.length > 0) {
18+
let node = stack[stack.length - 1]
19+
if (node.left && node.travered === undefined) {
20+
node.travered = true
21+
stack.push(node.left)
22+
} else {
23+
stack.pop()
24+
values.push(node.val)
25+
if (node.right) stack.push(node.right)
26+
}
27+
}
28+
29+
for (let i = 1; i < values.length; i++) {
30+
if (minDiff == null) minDiff = values[i] - values[i - 1]
31+
else minDiff = Math.min(minDiff, values[i] - values[i - 1])
32+
}
33+
return minDiff
34+
};
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
# Definition for a binary tree node.
2+
# class TreeNode(object):
3+
# def __init__(self, x):
4+
# self.val = x
5+
# self.left = None
6+
# self.right = None
7+
8+
class Solution(object):
9+
def getMinimumDifference(self, root):
10+
"""
11+
:type root: TreeNode
12+
:rtype: int
13+
"""
14+
# inorder traversal
15+
stack = [root]
16+
travered_map = {}
17+
values = []
18+
while len(stack) > 0:
19+
node = stack[-1]
20+
if node.left and travered_map.get(node) == None:
21+
travered_map[node] = True
22+
stack.append(node.left)
23+
else:
24+
stack.pop()
25+
values.append(node.val)
26+
if node.right:
27+
stack.append(node.right)
28+
min_diff = None
29+
for i in range(1, len(values)):
30+
if min_diff == None:
31+
min_diff = values[i] - values[i - 1]
32+
else:
33+
min_diff = min(min_diff, values[i] - values[i - 1])
34+
return min_diff

0 commit comments

Comments
 (0)