Skip to content

Commit f6d3b53

Browse files
authored
2024-12-23 v. 7.4.5: added "687. Longest Univalue Path"
2 parents df01627 + 9c79c8e commit f6d3b53

File tree

4 files changed

+83
-1
lines changed

4 files changed

+83
-1
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -609,3 +609,4 @@ Profile on LeetCode: [fartem](https://leetcode.com/fartem/).
609609
| 669. Trim a Binary Search Tree | [Link](https://leetcode.com/problems/trim-a-binary-search-tree/) | [Link](./lib/medium/669_trim_a_binary_search_tree.rb) | [Link](./test/medium/test_669_trim_a_binary_search_tree.rb) |
610610
| 677. Map Sum Pairs | [Link](https://leetcode.com/problems/map-sum-pairs/) | [Link](./lib/medium/677_map_sum_pairs.rb) | [Link](./test/medium/test_677_map_sum_pairs.rb) |
611611
| 678. Valid Parenthesis String | [Link](https://leetcode.com/problems/valid-parenthesis-string/) | [Link](./lib/medium/678_valid_parenthesis_string.rb) | [Link](./test/medium/test_678_valid_parenthesis_string.rb) |
612+
| 687. Longest Univalue Path | [Link](https://leetcode.com/problems/longest-univalue-path/) | [Link](./lib/medium/687_longest_univalue_path.rb) | [Link](./test/medium/test_687_longest_univalue_path.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.4'
8+
s.version = '7.4.5'
99
s.license = 'MIT'
1010
s.files = ::Dir['lib/**/*.rb'] + %w[README.md]
1111
s.executable = 'leetcode-ruby'
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
# frozen_string_literal: true
2+
3+
# https://leetcode.com/problems/longest-univalue-path/
4+
# @param {TreeNode} root
5+
# @return {Integer}
6+
def longest_univalue_path(root)
7+
@result = 0
8+
find_path_for_longest_univalue_path(root)
9+
10+
@result
11+
end
12+
13+
private
14+
15+
# @param {TreeNode} node
16+
# @return {Integer}
17+
def find_path_for_longest_univalue_path(node)
18+
return 0 unless node
19+
20+
arrow_left = 0
21+
left = find_path_for_longest_univalue_path(node.left)
22+
arrow_left += left + 1 if node.left && node.left.val == node.val
23+
24+
arrow_right = 0
25+
right = find_path_for_longest_univalue_path(node.right)
26+
arrow_right += right + 1 if node.right && node.right.val == node.val
27+
28+
@result = [@result, arrow_left + arrow_right].max
29+
30+
[arrow_left, arrow_right].max
31+
end
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
# frozen_string_literal: true
2+
3+
require_relative '../test_helper'
4+
require_relative '../../lib/common/binary_tree'
5+
require_relative '../../lib/medium/687_longest_univalue_path'
6+
require 'minitest/autorun'
7+
8+
class ValidParenthesisStringTest < ::Minitest::Test
9+
def test_default_one
10+
assert_equal(
11+
2,
12+
longest_univalue_path(
13+
::TreeNode.new(
14+
5,
15+
::TreeNode.new(
16+
4,
17+
::TreeNode.new(1),
18+
::TreeNode.new(1)
19+
),
20+
::TreeNode.new(
21+
5,
22+
nil,
23+
::TreeNode.new(5)
24+
)
25+
)
26+
)
27+
)
28+
end
29+
30+
def test_default_two
31+
assert_equal(
32+
2,
33+
longest_univalue_path(
34+
::TreeNode.new(
35+
1,
36+
::TreeNode.new(
37+
4,
38+
::TreeNode.new(4),
39+
::TreeNode.new(4)
40+
),
41+
::TreeNode.new(
42+
5,
43+
nil,
44+
::TreeNode.new(5)
45+
)
46+
)
47+
)
48+
)
49+
end
50+
end

0 commit comments

Comments
 (0)