Skip to content

Commit 86fad99

Browse files
authored
2025-01-07 v. 7.7.4: added "865. Smallest Subtree with all the Deepest Nodes"
2 parents 5d38617 + 544c1b1 commit 86fad99

File tree

4 files changed

+104
-1
lines changed

4 files changed

+104
-1
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -630,6 +630,7 @@ Profile on LeetCode: [fartem](https://leetcode.com/fartem/).
630630
| 856. Score of Parentheses | [Link](https://leetcode.com/problems/score-of-parentheses/) | [Link](./lib/medium/856_score_of_parentheses.rb) | [Link](./test/medium/test_856_score_of_parentheses.rb) |
631631
| 858. Mirror Reflection | [Link](https://leetcode.com/problems/mirror-reflection/) | [Link](./lib/medium/858_mirror_reflection.rb) | [Link](./test/medium/test_858_mirror_reflection.rb) |
632632
| 863. All Nodes Distance K in Binary Tree | [Link](https://leetcode.com/problems/all-nodes-distance-k-in-binary-tree/) | [Link](./lib/medium/863_all_nodes_distance_k_in_binary_tree.rb) | [Link](./test/medium/test_863_all_nodes_distance_k_in_binary_tree.rb) |
633+
| 865. Smallest Subtree with all the Deepest Nodes | [Link](https://leetcode.com/problems/smallest-subtree-with-all-the-deepest-nodes/) | [Link](./lib/medium/865_smallest_subtree_with_all_the_deepest_nodes.rb) | [Link](./test/medium/test_865_smallest_subtree_with_all_the_deepest_nodes.rb) |
633634

634635
### Hard
635636

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.7.3.1'
8+
s.version = '7.7.4'
99
s.license = 'MIT'
1010
s.files = ::Dir['lib/**/*.rb'] + %w[README.md]
1111
s.executable = 'leetcode-ruby'
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
# frozen_string_literal: true
2+
3+
# https://leetcode.com/problems/smallest-subtree-with-all-the-deepest-nodes/
4+
# @param {TreeNode} root
5+
# @return {TreeNode}
6+
def subtree_with_all_deepest(root)
7+
dfs_for_smallest_subtree(root, depth_for_smallest_subtree(root))
8+
end
9+
10+
private
11+
12+
# @param {TreeNode} node
13+
# @return {Integer}
14+
def depth_for_smallest_subtree(node)
15+
return 0 unless node
16+
17+
left = depth_for_smallest_subtree(node.left)
18+
right = depth_for_smallest_subtree(node.right)
19+
20+
1 + [left, right].max
21+
end
22+
23+
# @param {TreeNode} node
24+
# @param {Integer} depth
25+
# @return {TreeNode}
26+
def dfs_for_smallest_subtree(node, depth)
27+
return unless node
28+
29+
return node if depth == 1
30+
31+
left = dfs_for_smallest_subtree(node.left, depth - 1)
32+
right = dfs_for_smallest_subtree(node.right, depth - 1)
33+
34+
return node if left && right
35+
36+
left.nil? ? right : left
37+
end
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
# frozen_string_literal: true
2+
3+
require_relative '../test_helper'
4+
require_relative '../../lib/common/binary_tree'
5+
require_relative '../../lib/medium/865_smallest_subtree_with_all_the_deepest_nodes'
6+
require 'minitest/autorun'
7+
8+
class SmallestSubtreeWithAllTheDeepestNodesTest < ::Minitest::Test
9+
def test_default_one
10+
target = ::TreeNode.new(
11+
2,
12+
::TreeNode.new(7),
13+
::TreeNode.new(4)
14+
)
15+
16+
assert_equal(
17+
target,
18+
subtree_with_all_deepest(
19+
::TreeNode.new(
20+
3,
21+
::TreeNode.new(
22+
5,
23+
::TreeNode.new(6),
24+
target
25+
),
26+
::TreeNode.new(
27+
1,
28+
::TreeNode.new(0),
29+
::TreeNode.new(8)
30+
)
31+
)
32+
)
33+
)
34+
end
35+
36+
def test_default_two
37+
target = ::TreeNode.new(1)
38+
39+
assert_equal(
40+
target,
41+
subtree_with_all_deepest(
42+
target
43+
)
44+
)
45+
end
46+
47+
def test_default_three
48+
target = ::TreeNode.new(2)
49+
50+
assert_equal(
51+
target,
52+
subtree_with_all_deepest(
53+
::TreeNode.new(
54+
0,
55+
::TreeNode.new(
56+
1,
57+
nil,
58+
target
59+
),
60+
::TreeNode.new(3)
61+
)
62+
)
63+
)
64+
end
65+
end

0 commit comments

Comments
 (0)