Skip to content

Commit 08890a1

Browse files
authored
2024-12-19 v. 7.4.1: added "662. Maximum Width of Binary Tree"
2 parents bf6f79b + b7451bd commit 08890a1

File tree

4 files changed

+120
-1
lines changed

4 files changed

+120
-1
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -605,3 +605,4 @@ Profile on LeetCode: [fartem](https://leetcode.com/fartem/).
605605
| 652. Find Duplicate Subtrees | [Link](https://leetcode.com/problems/find-duplicate-subtrees/) | [Link](./lib/medium/652_find_duplicate_subtrees.rb) | [Link](./test/medium/test_652_find_duplicate_subtrees.rb) |
606606
| 654. Maximum Binary Tree | [Link](https://leetcode.com/problems/maximum-binary-tree/) | [Link](./lib/medium/654_maximum_binary_tree.rb) | [Link](./test/medium/test_654_maximum_binary_tree.rb) |
607607
| 659. Split Array into Consecutive Subsequences | [Link](https://leetcode.com/problems/split-array-into-consecutive-subsequences/) | [Link](./lib/medium/659_split_array_into_consecutive_subsequences.rb) | [Link](./test/medium/test_659_split_array_into_consecutive_subsequences.rb) |
608+
| 662. Maximum Width of Binary Tree | [Link](https://leetcode.com/problems/maximum-width-of-binary-tree/) | [Link](./lib/medium/662_maximum_width_of_binary_tree.rb) | [Link](./test/medium/test_662_maximum_width_of_binary_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 = '7.4.0'
8+
s.version = '7.4.1'
99
s.license = 'MIT'
1010
s.files = ::Dir['lib/**/*.rb'] + %w[README.md]
1111
s.executable = 'leetcode-ruby'
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
# frozen_string_literal: true
2+
3+
# https://leetcode.com/problems/maximum-width-of-binary-tree/
4+
# @param {TreeNode} root
5+
# @return {Integer}
6+
def width_of_binary_tree(root)
7+
result = 1
8+
nodes = [::TreeNodePair.new(root, 0)]
9+
until nodes.empty?
10+
size = nodes.size
11+
min = +1.0 / 0.0
12+
max = 0
13+
(0...size).each do |_i|
14+
pair = nodes.delete_at(0)
15+
min = [min, pair.value].min
16+
max = [max, pair.value].max
17+
18+
left = pair.node.left
19+
right = pair.node.right
20+
21+
nodes << ::TreeNodePair.new(left, pair.value * 2 + 1) if left
22+
nodes << ::TreeNodePair.new(right, pair.value * 2 + 2) if right
23+
end
24+
25+
result = [result, max - min + 1].max
26+
end
27+
28+
result
29+
end
30+
31+
private
32+
33+
# TreeNodePair
34+
class TreeNodePair
35+
attr_accessor :node, :value
36+
37+
# @param {TreeNode} node
38+
# @param {Integer} value
39+
def initialize(node, value)
40+
@node = node
41+
@value = value
42+
end
43+
end
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
# frozen_string_literal: true
2+
3+
require_relative '../test_helper'
4+
require_relative '../../lib/common/binary_tree'
5+
require_relative '../../lib/medium/662_maximum_width_of_binary_tree'
6+
require 'minitest/autorun'
7+
8+
class MaximumWidthOfBinaryTreeTest < ::Minitest::Test
9+
def test_default_one
10+
assert_equal(
11+
4,
12+
width_of_binary_tree(
13+
::TreeNode.new(
14+
1,
15+
::TreeNode.new(
16+
3,
17+
::TreeNode.new(5),
18+
::TreeNode.new(3)
19+
),
20+
::TreeNode.new(
21+
2,
22+
nil,
23+
::TreeNode.new(9)
24+
)
25+
)
26+
)
27+
)
28+
end
29+
30+
def test_default_two
31+
assert_equal(
32+
7,
33+
width_of_binary_tree(
34+
::TreeNode.new(
35+
1,
36+
::TreeNode.new(
37+
3,
38+
::TreeNode.new(
39+
5,
40+
::TreeNode.new(6),
41+
nil
42+
),
43+
nil
44+
),
45+
::TreeNode.new(
46+
2,
47+
nil,
48+
::TreeNode.new(
49+
9,
50+
::TreeNode.new(7),
51+
nil
52+
)
53+
)
54+
)
55+
)
56+
)
57+
end
58+
59+
def test_default_three
60+
assert_equal(
61+
2,
62+
width_of_binary_tree(
63+
::TreeNode.new(
64+
1,
65+
::TreeNode.new(
66+
3,
67+
::TreeNode.new(5),
68+
nil
69+
),
70+
::TreeNode.new(2)
71+
)
72+
)
73+
)
74+
end
75+
end

0 commit comments

Comments
 (0)