Skip to content

2024-08-76 v. 6.4.1: added "109. Convert Sorted List to Binary Search Tree" #700

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Aug 7, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -506,3 +506,4 @@ Profile on LeetCode: [fartem](https://leetcode.com/fartem/).
| 105. Construct Binary Tree from Preorder and Inorder Traversal | [Link](https://leetcode.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal/) | [Link](./lib/medium/105_construct_binary_tree_from_preorder_and_inorder_traversal.rb) |
| 106. Construct Binary Tree from Inorder and Postorder Traversal | [Link](https://leetcode.com/problems/construct-binary-tree-from-inorder-and-postorder-traversal/) | [Link](./lib/medium/106_construct_binary_tree_from_inorder_and_postorder_traversal.rb) |
| 107. Binary Tree Level Order Traversal II | [Link](https://leetcode.com/problems/binary-tree-level-order-traversal-ii/) | [Link](./lib/medium/107_binary_tree_level_order_traversal_ii.rb) |
| 109. Convert Sorted List to Binary Search Tree | [Link](https://leetcode.com/problems/convert-sorted-list-to-binary-search-tree/) | [Link](./lib/medium/109_convert_sorted_list_to_binary_search_tree.rb) |
2 changes: 1 addition & 1 deletion leetcode-ruby.gemspec
Original file line number Diff line number Diff line change
@@ -5,7 +5,7 @@ require 'English'
::Gem::Specification.new do |s|
s.required_ruby_version = '>= 3.0'
s.name = 'leetcode-ruby'
s.version = '6.4.0'
s.version = '6.4.1'
s.license = 'MIT'
s.files = ::Dir['lib/**/*.rb'] + %w[README.md]
s.executable = 'leetcode-ruby'
55 changes: 55 additions & 0 deletions lib/medium/109_convert_sorted_list_to_binary_search_tree.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
# frozen_string_literal: true

require_relative '../common/binary_tree'
require_relative '../common/linked_list'

# https://leetcode.com/problems/convert-sorted-list-to-binary-search-tree/
# @param {ListNode} head
# @return {TreeNode}
def sorted_list_to_bst(head)
return unless head

middle = middle(head)
node = ::TreeNode.new(middle.val)

return node if head == middle

node.left = sorted_list_to_bst(head)
node.right = sorted_list_to_bst(middle.next)

node
end

# public TreeNode sortedListToBST(ListNode head) {
# if (head == null) {
# return null;
# }
# ListNode middle = middle(head);
# TreeNode node = new TreeNode(middle.val);
# if (head == middle) {
# return node;
# }
# node.left = sortedListToBST(head);
# node.right = sortedListToBST(middle.next);
# return node;
# }

private

# @param {ListNode} node
# @return {ListNode}
def middle(node)
fast = node
slow = node
prev = node

while !fast.nil? && !fast.next.nil?
prev = slow
slow = slow.next
fast = fast.next.next
end

prev.next = nil unless prev.nil?

slow
end
40 changes: 40 additions & 0 deletions test/medium/test_109_convert_sorted_list_to_binary_search_tree.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
# frozen_string_literal: true

require_relative '../test_helper'
require_relative '../../lib/common/binary_tree'
require_relative '../../lib/common/linked_list'
require_relative '../../lib/medium/109_convert_sorted_list_to_binary_search_tree'
require 'minitest/autorun'

class ConvertSortedListToBinarySearchTreeTest < ::Minitest::Test
def test_default
assert(
::TreeNode.are_equals(
::TreeNode.new(
0,
::TreeNode.new(
-3,
::TreeNode.new(-10),
nil
),
::TreeNode.new(
9,
::TreeNode.new(5),
nil
)
),
sorted_list_to_bst(
::ListNode.from_array(
[-10, -3, 0, 5, 9]
)
)
)
)
assert(
::TreeNode.are_equals(
nil,
sorted_list_to_bst(nil)
)
)
end
end