Skip to content

Commit 77f43a3

Browse files
authored
2025-01-01 v. 7.5.8: added "814. Binary Tree Pruning"
2 parents 5b7acf5 + c2d487d commit 77f43a3

File tree

4 files changed

+135
-1
lines changed

4 files changed

+135
-1
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -622,3 +622,4 @@ Profile on LeetCode: [fartem](https://leetcode.com/fartem/).
622622
| 763. Partition Labels | [Link](https://leetcode.com/problems/partition-labels/) | [Link](./lib/medium/763_partition_labels.rb) | [Link](./test/medium/test_763_partition_labels.rb) |
623623
| 784. Letter Case Permutation | [Link](https://leetcode.com/problems/letter-case-permutation/) | [Link](./lib/medium/784_letter_case_permutation.rb) | [Link](./test/medium/test_784_letter_case_permutation.rb) |
624624
| 797. All Paths From Source to Target | [Link](https://leetcode.com/problems/all-paths-from-source-to-target/) | [Link](./lib/medium/797_all_paths_from_source_to_target.rb) | [Link](./test/medium/test_797_all_paths_from_source_to_target.rb) |
625+
| 814. Binary Tree Pruning | [Link](https://leetcode.com/problems/binary-tree-pruning/) | [Link](./lib/medium/814_binary_tree_pruning.rb) | [Link](./test/medium/test_814_binary_tree_pruning.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.5.7.1'
8+
s.version = '7.5.8'
99
s.license = 'MIT'
1010
s.files = ::Dir['lib/**/*.rb'] + %w[README.md]
1111
s.executable = 'leetcode-ruby'
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
# frozen_string_literal: true
2+
3+
# https://leetcode.com/problems/binary-tree-pruning/
4+
# @param {TreeNode} root
5+
# @return {TreeNode}
6+
def prune_tree(root) = has_one_in_prune_tree?(root) ? root : nil
7+
8+
private
9+
10+
# @param {TreeNode} node
11+
# @return {Boolean}
12+
def has_one_in_prune_tree?(node)
13+
return false unless node
14+
15+
has_one_at_left = has_one_in_prune_tree?(node.left)
16+
has_one_at_right = has_one_in_prune_tree?(node.right)
17+
18+
node.left = nil unless has_one_at_left
19+
node.right = nil unless has_one_at_right
20+
21+
node.val == 1 || has_one_at_left || has_one_at_right
22+
end
Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
# frozen_string_literal: true
2+
3+
require_relative '../test_helper'
4+
require_relative '../../lib/common/binary_tree'
5+
require_relative '../../lib/medium/814_binary_tree_pruning'
6+
require 'minitest/autorun'
7+
8+
class BinaryTreePruningTest < ::Minitest::Test
9+
def test_default_one
10+
assert(
11+
::TreeNode.are_equals(
12+
::TreeNode.new(
13+
1,
14+
nil,
15+
::TreeNode.new(
16+
0,
17+
nil,
18+
::TreeNode.new(1)
19+
)
20+
),
21+
prune_tree(
22+
::TreeNode.new(
23+
1,
24+
nil,
25+
::TreeNode.new(
26+
0,
27+
::TreeNode.new(0),
28+
::TreeNode.new(1)
29+
)
30+
)
31+
)
32+
)
33+
)
34+
end
35+
36+
def test_default_two
37+
assert(
38+
::TreeNode.are_equals(
39+
::TreeNode.new(
40+
1,
41+
nil,
42+
::TreeNode.new(
43+
1,
44+
nil,
45+
::TreeNode.new(1)
46+
)
47+
),
48+
prune_tree(
49+
::TreeNode.new(
50+
1,
51+
::TreeNode.new(
52+
0,
53+
::TreeNode.new(0),
54+
::TreeNode.new(0)
55+
),
56+
::TreeNode.new(
57+
1,
58+
::TreeNode.new(0),
59+
::TreeNode.new(1)
60+
)
61+
)
62+
)
63+
)
64+
)
65+
end
66+
67+
def test_default_three
68+
assert(
69+
::TreeNode.are_equals(
70+
::TreeNode.new(
71+
1,
72+
::TreeNode.new(
73+
1,
74+
::TreeNode.new(
75+
1,
76+
::TreeNode.new(1),
77+
::TreeNode.new(1)
78+
)
79+
),
80+
::TreeNode.new(
81+
0,
82+
nil,
83+
::TreeNode.new(1)
84+
)
85+
),
86+
prune_tree(
87+
::TreeNode.new(
88+
1,
89+
::TreeNode.new(
90+
1,
91+
::TreeNode.new(
92+
1,
93+
::TreeNode.new(
94+
1,
95+
::TreeNode.new(0),
96+
nil
97+
),
98+
::TreeNode.new(1)
99+
)
100+
),
101+
::TreeNode.new(
102+
0,
103+
::TreeNode.new(0),
104+
::TreeNode.new(1)
105+
)
106+
)
107+
)
108+
)
109+
)
110+
end
111+
end

0 commit comments

Comments
 (0)