Skip to content

Commit 799d3c9

Browse files
authored
Merge pull request #694 from fartem/99_Recover_Binary_Search_Tree
2024-08-30 v. 6.3.5: added "99. Recover Binary Search Tree"
2 parents 8e65e0f + 31eafcc commit 799d3c9

File tree

4 files changed

+111
-3
lines changed

4 files changed

+111
-3
lines changed

README.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ Profile on LeetCode: [fartem](https://leetcode.com/fartem/).
1313
### Easy
1414

1515
| Name | Link to LeetCode | Link to solution |
16-
|--------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------|
16+
| ------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- |
1717
| 1. Two Sum | [Link](https://leetcode.com/problems/two-sum/) | [Link](./lib/easy/1_two_sum.rb) |
1818
| 9. Palindrome Number | [Link](https://leetcode.com/problems/palindrome-number/) | [Link](./lib/easy/9_palindrome_number.rb) |
1919
| 13. Roman to Integer | [Link](https://leetcode.com/problems/roman-to-integer/) | [Link](./lib/easy/13_roman_to_integer.rb) |
@@ -458,7 +458,7 @@ Profile on LeetCode: [fartem](https://leetcode.com/fartem/).
458458
### Medium
459459

460460
| Name | Link to LeetCode | Link to solution |
461-
|-------------------------------------------------------------|------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------|
461+
| ----------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- |
462462
| 2. Add Two Numbers | [Link](https://leetcode.com/problems/add-two-numbers/) | [Link](./lib/medium/2_add_two_numbers.rb) |
463463
| 3. Longest Substring Without Repeating Characters | [Link](https://leetcode.com/problems/longest-substring-without-repeating-characters/) | [Link](./lib/medium/3_longest_substring_without_repeating_characters.rb) |
464464
| 5. Longest Palindromic Substring | [Link](https://leetcode.com/problems/longest-palindromic-substring/) | [Link](./lib/medium/5_longest_palindromic_substring.rb) |
@@ -500,3 +500,4 @@ Profile on LeetCode: [fartem](https://leetcode.com/fartem/).
500500
| 95. Unique Binary Search Trees II | [Link](https://leetcode.com/problems/unique-binary-search-trees-ii/) | [Link](./lib/medium/95_unique_binary_search_trees_ii.rb) |
501501
| 96. Unique Binary Search Trees | [Link](https://leetcode.com/problems/unique-binary-search-trees/) | [Link](./lib/medium/96_unique_binary_search_trees.rb) |
502502
| 98. Validate Binary Search Tree | [Link](https://leetcode.com/problems/validate-binary-search-tree/) | [Link](./lib/medium/98_validate_binary_search_tree.rb) |
503+
| 99. Recover Binary Search Tree | [Link](https://leetcode.com/problems/recover-binary-search-tree/) | [Link](./lib/medium/99_recover_binary_search_tree.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.3.4'
8+
s.version = '6.3.5'
99
s.license = 'MIT'
1010
s.files = ::Dir['lib/**/*.rb'] + %w[README.md]
1111
s.executable = 'leetcode-ruby'
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
# frozen_string_literal: true
2+
3+
# https://leetcode.com/problems/recover-binary-search-tree/
4+
# @param {TreeNode} root
5+
# @return {Void} Do not return anything, modify root in-place instead.
6+
def recover_tree(root)
7+
nodes = []
8+
traverse99(root, nodes)
9+
first = nil
10+
(0...(nodes.length - 1)).each do |i|
11+
curr = nodes[i]
12+
nxt = nodes[i + 1]
13+
14+
puts(curr.val)
15+
puts(nxt.val)
16+
17+
first = nxt if nxt.val < curr.val
18+
end
19+
20+
second = nodes.first
21+
(1...nodes.length).each do |i|
22+
prev = nodes[i - 1]
23+
curr = nodes[i]
24+
25+
next unless prev.val < first.val && first.val < curr.val
26+
27+
second = curr
28+
29+
break
30+
end
31+
32+
temp = first.val
33+
first.val = second.val
34+
second.val = temp
35+
end
36+
37+
private
38+
39+
def traverse99(root, nodes)
40+
return unless root
41+
42+
traverse99(root.left, nodes)
43+
nodes << root
44+
traverse99(root.right, nodes)
45+
end
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
# frozen_string_literal: true
2+
3+
require_relative '../test_helper'
4+
require_relative '../../lib/common/binary_tree'
5+
require_relative '../../lib/medium/99_recover_binary_search_tree'
6+
require 'minitest/autorun'
7+
8+
class RecoverBinarySearchTreeTest < ::Minitest::Test
9+
def test_default
10+
input = ::TreeNode.new(
11+
1,
12+
::TreeNode.new(
13+
3,
14+
nil,
15+
::TreeNode.new(2)
16+
),
17+
nil
18+
)
19+
recover_tree(input)
20+
21+
assert(
22+
::TreeNode.are_equals(
23+
::TreeNode.new(
24+
3,
25+
::TreeNode.new(
26+
1,
27+
nil,
28+
::TreeNode.new(2)
29+
),
30+
nil
31+
),
32+
input
33+
)
34+
)
35+
36+
input = ::TreeNode.new(
37+
3,
38+
::TreeNode.new(1),
39+
::TreeNode.new(
40+
4,
41+
::TreeNode.new(2),
42+
nil
43+
)
44+
)
45+
recover_tree(input)
46+
47+
assert(
48+
::TreeNode.are_equals(
49+
::TreeNode.new(
50+
2,
51+
::TreeNode.new(1),
52+
::TreeNode.new(
53+
4,
54+
::TreeNode.new(3),
55+
nil
56+
)
57+
),
58+
input
59+
)
60+
)
61+
end
62+
end

0 commit comments

Comments
 (0)