Skip to content

Commit a2d1d55

Browse files
committed
2024-09-04 v. 6.6.2: added "173. Binary Search Tree Iterator"
1 parent 183cbaa commit a2d1d55

File tree

4 files changed

+72
-1
lines changed

4 files changed

+72
-1
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -527,3 +527,4 @@ Profile on LeetCode: [fartem](https://leetcode.com/fartem/).
527527
| 155. Min Stack | [Link](https://leetcode.com/problems/min-stack/) | [Link](./lib/medium/155_min_stack.rb) | [Link](./test/medium/test_155_min_stack.rb) |
528528
| 165. Compare Version Numbers | [Link](https://leetcode.com/problems/compare-version-numbers/) | [Link](./lib/medium/165_compare_version_numbers.rb) | [Link](./test/medium/test_165_compare_version_numbers.rb) |
529529
| 167. Two Sum II - Input Array Is Sorted | [Link](https://leetcode.com/problems/two-sum-ii-input-array-is-sorted/) | [Link](./lib/medium/167_two_sum_ii_input_array_is_sorted.rb) | [Link](./test/medium/test_167_two_sum_ii_input_array_is_sorted.rb) |
530+
| 173. Binary Search Tree Iterator | [Link](https://leetcode.com/problems/binary-search-tree-iterator/) | [Link](./lib/medium/173_binary_search_tree_iterator.rb) | [Link](./test/medium/test_173_binary_search_tree_iterator.rb) |

leetcode-ruby.gemspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ require 'English'
55
::Gem::Specification.new do |s|
66
s.required_ruby_version = '>= 3.0'
77
s.name = 'leetcode-ruby'
8-
s.version = '6.6.1'
8+
s.version = '6.6.2'
99
s.license = 'MIT'
1010
s.files = ::Dir['lib/**/*.rb'] + %w[README.md]
1111
s.executable = 'leetcode-ruby'
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
# frozen_string_literal: true
2+
3+
# https://leetcode.com/problems/binary-search-tree-iterator/
4+
class BSTIterator
5+
# @param {TreeNode} root
6+
def initialize(root)
7+
@values = []
8+
@pointer = 0
9+
10+
traverse173(root) if root
11+
end
12+
13+
# @return {Integer}
14+
def next
15+
value = @values[@pointer]
16+
@pointer += 1
17+
18+
value
19+
end
20+
21+
# @return {Boolean}
22+
def has_next = @values.size > @pointer
23+
24+
private
25+
26+
# @param {TreeNode} node
27+
# @return {Void}
28+
def traverse173(node)
29+
return unless node
30+
31+
traverse173(node.left)
32+
@values << node.val
33+
traverse173(node.right)
34+
end
35+
end
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
# frozen_string_literal: true
2+
3+
require_relative '../test_helper'
4+
require_relative '../../lib/common/binary_tree'
5+
require_relative '../../lib/medium/173_binary_search_tree_iterator'
6+
require 'minitest/autorun'
7+
8+
class BinarySearchTreeIndicatorTest < ::Minitest::Test
9+
def test_default_one
10+
bst_iterator = ::BSTIterator.new(
11+
::TreeNode.new(
12+
7,
13+
::TreeNode.new(3),
14+
::TreeNode.new(
15+
15,
16+
::TreeNode.new(9),
17+
::TreeNode.new(20)
18+
)
19+
)
20+
)
21+
22+
assert_equal(3, bst_iterator.next)
23+
assert_equal(7, bst_iterator.next)
24+
assert(bst_iterator.has_next)
25+
26+
assert_equal(9, bst_iterator.next)
27+
assert(bst_iterator.has_next)
28+
29+
assert_equal(15, bst_iterator.next)
30+
assert(bst_iterator.has_next)
31+
32+
assert_equal(20, bst_iterator.next)
33+
assert(!bst_iterator.has_next)
34+
end
35+
end

0 commit comments

Comments
 (0)