Skip to content

Commit

Permalink
Merge pull request #729 from fartem/173_binary_search_tree_iterator
Browse files Browse the repository at this point in the history
2024-09-04 v. 6.6.2: added "173. Binary Search Tree Iterator"
  • Loading branch information
fartem authored Sep 4, 2024
2 parents 183cbaa + a2d1d55 commit 4f55b79
Show file tree
Hide file tree
Showing 4 changed files with 72 additions and 1 deletion.
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -527,3 +527,4 @@ Profile on LeetCode: [fartem](https://leetcode.com/fartem/).
| 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) |
| 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) |
| 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) |
| 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) |
2 changes: 1 addition & 1 deletion leetcode-ruby.gemspec
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ require 'English'
::Gem::Specification.new do |s|
s.required_ruby_version = '>= 3.0'
s.name = 'leetcode-ruby'
s.version = '6.6.1'
s.version = '6.6.2'
s.license = 'MIT'
s.files = ::Dir['lib/**/*.rb'] + %w[README.md]
s.executable = 'leetcode-ruby'
Expand Down
35 changes: 35 additions & 0 deletions lib/medium/173_binary_search_tree_iterator.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
# frozen_string_literal: true

# https://leetcode.com/problems/binary-search-tree-iterator/
class BSTIterator
# @param {TreeNode} root
def initialize(root)
@values = []
@pointer = 0

traverse173(root) if root
end

# @return {Integer}
def next
value = @values[@pointer]
@pointer += 1

value
end

# @return {Boolean}
def has_next = @values.size > @pointer

private

# @param {TreeNode} node
# @return {Void}
def traverse173(node)
return unless node

traverse173(node.left)
@values << node.val
traverse173(node.right)
end
end
35 changes: 35 additions & 0 deletions test/medium/test_173_binary_search_tree_iterator.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
# frozen_string_literal: true

require_relative '../test_helper'
require_relative '../../lib/common/binary_tree'
require_relative '../../lib/medium/173_binary_search_tree_iterator'
require 'minitest/autorun'

class BinarySearchTreeIndicatorTest < ::Minitest::Test
def test_default_one
bst_iterator = ::BSTIterator.new(
::TreeNode.new(
7,
::TreeNode.new(3),
::TreeNode.new(
15,
::TreeNode.new(9),
::TreeNode.new(20)
)
)
)

assert_equal(3, bst_iterator.next)
assert_equal(7, bst_iterator.next)
assert(bst_iterator.has_next)

assert_equal(9, bst_iterator.next)
assert(bst_iterator.has_next)

assert_equal(15, bst_iterator.next)
assert(bst_iterator.has_next)

assert_equal(20, bst_iterator.next)
assert(!bst_iterator.has_next)
end
end

0 comments on commit 4f55b79

Please sign in to comment.