From 410b6d0eeab6e40bbfd20cf06219314ff2b6e1d9 Mon Sep 17 00:00:00 2001 From: fartem Date: Mon, 13 Jan 2025 10:24:30 +0300 Subject: [PATCH] 2025-01-13 v. 7.9.5: added "919. Complete Binary Tree Inserter" --- README.md | 1 + leetcode-ruby.gemspec | 2 +- .../919_complete_binary_tree_inserter.rb | 41 +++++++++++++++++++ .../test_919_complete_binary_tree_inserter.rb | 36 ++++++++++++++++ 4 files changed, 79 insertions(+), 1 deletion(-) create mode 100644 lib/medium/919_complete_binary_tree_inserter.rb create mode 100644 test/medium/test_919_complete_binary_tree_inserter.rb diff --git a/README.md b/README.md index 791c03f3..aa2904ea 100644 --- a/README.md +++ b/README.md @@ -640,6 +640,7 @@ Profile on LeetCode: [fartem](https://leetcode.com/fartem/). | 910. Smallest Range II | [Link](https://leetcode.com/problems/smallest-range-ii/) | [Link](./lib/medium/910_smallest_range_ii.rb) | [Link](./test/medium/test_910_smallest_range_ii.rb) | | 912. Sort an Array | [Link](https://leetcode.com/problems/sort-an-array/) | [Link](./lib/medium/912_sort_an_array.rb) | [Link](./test/medium/test_912_sort_an_array.rb) | | 916. Word Subsets | [Link](https://leetcode.com/problems/word-subsets/) | [Link](./lib/medium/916_word_subsets.rb) | [Link](./test/medium/test_916_word_subsets.rb) | +| 919. Complete Binary Tree Inserter | [Link](https://leetcode.com/problems/complete-binary-tree-inserter/) | [Link](./lib/medium/919_complete_binary_tree_inserter.rb) | [Link](./test/medium/test_919_complete_binary_tree_inserter.rb) | | 1400. Construct K Palindrome Strings | [Link](https://leetcode.com/problems/construct-k-palindrome-strings/) | [Link](./lib/medium/1400_construct_k_palindrome_strings.rb) | [Link](./test/medium/test_1400_construct_k_palindrome_strings.rb) | | 2116. Check if a Parentheses String Can Be Valid | [Link](https://leetcode.com/problems/check-if-a-parentheses-string-can-be-valid/) | [Link](./lib/medium/2116_check_if_a_parentheses_string_can_be_valid.rb) | [Link](./test/medium/test_2116_check_if_a_parentheses_string_can_be_valid.rb) | | 3223. Minimum Length of String After Operations | [Link](https://leetcode.com/problems/minimum-length-of-string-after-operations/) | [Link](./lib/medium/3223_minimum_length_of_string_after_operations.rb) | [Link](./test/medium/test_3223_minimum_length_of_string_after_operations.rb) | diff --git a/leetcode-ruby.gemspec b/leetcode-ruby.gemspec index 14b25040..3390030e 100644 --- a/leetcode-ruby.gemspec +++ b/leetcode-ruby.gemspec @@ -5,7 +5,7 @@ require 'English' ::Gem::Specification.new do |s| s.required_ruby_version = '>= 3.0' s.name = 'leetcode-ruby' - s.version = '7.9.4' + s.version = '7.9.5' s.license = 'MIT' s.files = ::Dir['lib/**/*.rb'] + %w[README.md] s.executable = 'leetcode-ruby' diff --git a/lib/medium/919_complete_binary_tree_inserter.rb b/lib/medium/919_complete_binary_tree_inserter.rb new file mode 100644 index 00000000..7983ff01 --- /dev/null +++ b/lib/medium/919_complete_binary_tree_inserter.rb @@ -0,0 +1,41 @@ +# frozen_string_literal: true + +require_relative '../common/binary_tree' + +# https://leetcode.com/problems/complete-binary-tree-inserter/ +class CBTInserter + # @param {TreeNode} root + def initialize(root) + @root = root + @deq = [] + + que = [root] + until que.empty? + node = que.shift + + @deq << node if !node.left || !node.right + + que << node.left if node.left + que << node.right if node.right + end + end + + # @param {Integer} val + # @return {Integer} + def insert(val) + node = @deq.first + @deq << ::TreeNode.new(val) + + if node.left + node.right = @deq.last + @deq.shift + else + node.left = @deq.last + end + + node.val + end + + # @return {TreeNode} + def get_root = @root +end diff --git a/test/medium/test_919_complete_binary_tree_inserter.rb b/test/medium/test_919_complete_binary_tree_inserter.rb new file mode 100644 index 00000000..34993588 --- /dev/null +++ b/test/medium/test_919_complete_binary_tree_inserter.rb @@ -0,0 +1,36 @@ +# frozen_string_literal: true + +require_relative '../test_helper' +require_relative '../../lib/common/binary_tree' +require_relative '../../lib/medium/919_complete_binary_tree_inserter' +require 'minitest/autorun' + +class CompleteBinaryTreeInserterTest < ::Minitest::Test + def test_default_one + cbt_inserter = ::CBTInserter.new( + ::TreeNode.new( + 1, + ::TreeNode.new(2), + nil + ) + ) + + assert_equal(1, cbt_inserter.insert(3)) + assert_equal(2, cbt_inserter.insert(4)) + + assert( + ::TreeNode.are_equals( + ::TreeNode.new( + 1, + ::TreeNode.new( + 2, + ::TreeNode.new(4), + nil + ), + ::TreeNode.new(3) + ), + cbt_inserter.get_root + ) + ) + end +end