Skip to content

Commit 6f3fced

Browse files
authored
Merge pull request #781 from fartem/449_Serialize_and_Deserialize_BST
2024-11-25 v. 7.1.0: added "449. Serialize and Deserialize BST"
2 parents d6a7e79 + 57df4ec commit 6f3fced

File tree

4 files changed

+100
-1
lines changed

4 files changed

+100
-1
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -575,3 +575,4 @@ Profile on LeetCode: [fartem](https://leetcode.com/fartem/).
575575
| 442. Find All Duplicates in an Array | [Link](https://leetcode.com/problems/find-all-duplicates-in-an-array/) | [Link](./lib/medium/442_find_all_duplicates_in_an_array.rb) | [Link](./test/medium/test_442_find_all_duplicates_in_an_array.rb) |
576576
| 443. String Compression | [Link](https://leetcode.com/problems/string-compression/) | [Link](./lib/medium/443_string_compression.rb) | [Link](./test/medium/test_443_string_compression.rb) |
577577
| 445. Add Two Numbers II | [Link](https://leetcode.com/problems/add-two-numbers-ii/) | [Link](./lib/medium/445_add_two_numbers_ii.rb) | [Link](./test/medium/test_445_add_two_numbers_ii.rb) |
578+
| 449. Serialize and Deserialize BST | [Link](https://leetcode.com/problems/serialize-and-deserialize-bst/) | [Link](./lib/medium/449_serialize_and_deserialize_bst.rb) | [Link](./test/medium/test_449_serialize_and_deserialize_bst.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 = '7.0.9.1'
8+
s.version = '7.1.0'
99
s.license = 'MIT'
1010
s.files = ::Dir['lib/**/*.rb'] + %w[README.md]
1111
s.executable = 'leetcode-ruby'
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
# frozen_string_literal: true
2+
3+
# https://leetcode.com/problems/serialize-and-deserialize-bst/
4+
# @param {TreeNode} root
5+
# @return {String}
6+
def serialize(root)
7+
return '#' unless root
8+
9+
result = []
10+
result << root.val
11+
12+
left = serialize(root.left)
13+
result << ','
14+
result << left
15+
16+
right = serialize(root.right)
17+
result << ','
18+
result << right
19+
20+
result.join
21+
end
22+
23+
# @param {String} data
24+
# @return {TreeNode}
25+
def deserialize(data)
26+
raw_data = data.split(',')
27+
28+
deserialize_from_string(raw_data, 0, raw_data.size - 1)
29+
end
30+
31+
# @param {String[]} data
32+
# @param {Integer} l
33+
# @param {Integer} r
34+
# @return {TreeNode}
35+
def deserialize_from_string(data, l, r)
36+
return if data[l] == '#'
37+
38+
root = ::TreeNode.new(data[l].to_i)
39+
built = false
40+
41+
((l + 1)..r).each do |i|
42+
value = data[i]
43+
44+
next if value == '#'
45+
46+
next unless value.to_i > root.val
47+
48+
built = true
49+
root.left = deserialize_from_string(data, l + 1, i - 1)
50+
root.right = deserialize_from_string(data, i, r)
51+
52+
break
53+
end
54+
55+
root.left = deserialize_from_string(data, l + 1, r) unless built
56+
57+
root
58+
end
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
# frozen_string_literal: true
2+
3+
require_relative '../test_helper'
4+
require_relative '../../lib/common/binary_tree'
5+
require_relative '../../lib/medium/449_serialize_and_deserialize_bst'
6+
require 'minitest/autorun'
7+
8+
class SerializeAndDeserializeBSTTest < ::Minitest::Test
9+
def test_default_one
10+
node = ::TreeNode.new(
11+
2,
12+
::TreeNode.new(1),
13+
::TreeNode.new(3)
14+
)
15+
result = serialize(node)
16+
17+
assert(
18+
::TreeNode.are_equals(
19+
deserialize(result),
20+
::TreeNode.new(
21+
2,
22+
::TreeNode.new(1),
23+
::TreeNode.new(3)
24+
)
25+
)
26+
)
27+
end
28+
29+
def test_default_two
30+
node = ::TreeNode.new
31+
result = serialize(node)
32+
33+
assert(
34+
::TreeNode.are_equals(
35+
deserialize(result),
36+
::TreeNode.new
37+
)
38+
)
39+
end
40+
end

0 commit comments

Comments
 (0)