Skip to content

Commit 41f132c

Browse files
solves second minimum in bst
1 parent 33026f8 commit 41f132c

File tree

3 files changed

+66
-1
lines changed

3 files changed

+66
-1
lines changed

‎README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,7 @@
173173
| 661 | [Image Smoother](https://leetcode.com/problems/image-smoother) | [![Java](assets/java.png)](src/ImageSmoother.java) [![Python](assets/python.png)](python/image_smoother.py) |
174174
| 665 | [Non Deceasing Array](https://leetcode.com/problems/non-decreasing-array) | [![Java](assets/java.png)](src/NonDecreasingArray.java) [![Python](assets/python.png)](python/non_decreasing_array.py) |
175175
| 669 | [Trim a Binary Search Tree](https://leetcode.com/problems/trim-a-binary-search-tree) | [![Java](assets/java.png)](src/TrimABinarySearchTree.java) [![Python](assets/python.png)](python/trim_a_binary_search_tree.py) |
176-
| 671 | [Second Minimum Node in Binary Tree](https://leetcode.com/problems/second-minimum-node-in-a-binary-tree) | |
176+
| 671 | [Second Minimum Node in Binary Tree](https://leetcode.com/problems/second-minimum-node-in-a-binary-tree) | [![Java](assets/java.png)](src/SecondMinimumNodeInBinaryTree.java) [![Python](assets/python.png)](python/)second_minimum_node_in_binary_tree.py |
177177
| 674 | [Longest Continuous Increasing Subsequence](https://leetcode.com/problems/longest-continuous-increasing-subsequence) | |
178178
| 680 | [Valid Palindrome II](https://leetcode.com/problems/valid-palindrome-ii) | |
179179
| 682 | [Baseball Game](https://leetcode.com/problems/baseball-game) | |
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
from heapq import heappop, heappush
2+
3+
# Definition for a binary tree node.
4+
class TreeNode:
5+
def __init__(self, val=0, left=None, right=None):
6+
self.val = val
7+
self.left = left
8+
self.right = right
9+
10+
11+
class Solution:
12+
def addNodesToSet(self, root: TreeNode, elements: set) -> None:
13+
if root is None: return
14+
elements.add(root.val)
15+
self.addNodesToSet(root.left, elements)
16+
self.addNodesToSet(root.right, elements)
17+
18+
def unique_elements(self, root: TreeNode) -> set:
19+
elements = set()
20+
self.addNodesToSet(root, elements)
21+
return elements
22+
23+
def findSecondMinimumValue(self, root: TreeNode) -> int:
24+
elements = self.unique_elements(root)
25+
if len(elements) < 2: return -1
26+
heap = []
27+
for element in elements:
28+
heappush(heap, element)
29+
heappop(heap)
30+
return heappop(heap)
+35
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import java.util.HashSet;
2+
import java.util.PriorityQueue;
3+
import java.util.Queue;
4+
import java.util.Set;
5+
6+
public class SecondMinimumNodeInBinaryTree {
7+
public int findSecondMinimumValue(TreeNode root) {
8+
Set<Integer> elements = treeToSet(root);
9+
if (elements.size() < 2) return -1;
10+
Queue<Integer> queue = setToMinHeap(elements);
11+
queue.poll();
12+
return queue.peek();
13+
}
14+
15+
private static Set<Integer> treeToSet(TreeNode root) {
16+
Set<Integer> result = new HashSet<>();
17+
addTreeNodesToSet(root, result);
18+
return result;
19+
}
20+
21+
private static void addTreeNodesToSet(TreeNode root, Set<Integer> set) {
22+
if (root == null) return;
23+
set.add(root.val);
24+
addTreeNodesToSet(root.left, set);
25+
addTreeNodesToSet(root.right, set);
26+
}
27+
28+
private static Queue<Integer> setToMinHeap(Set<Integer> elements) {
29+
Queue<Integer> queue = new PriorityQueue<>();
30+
for (int element : elements) {
31+
queue.add(element);
32+
}
33+
return queue;
34+
}
35+
}

0 commit comments

Comments
 (0)