Skip to content

Commit f5c8edd

Browse files
committed
* feat: [LeetCode #872] Leaf-Similar Trees
Тип: Binary Tree Сложность: easy Временная сложность: O(n + m) Пространственная сложность: O(1)
1 parent 9518f76 commit f5c8edd

4 files changed

Lines changed: 44 additions & 2 deletions

File tree

.pre-commit-config.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
repos:
22
- repo: https://github.com/astral-sh/ruff-pre-commit
3-
rev: v0.12.7
3+
rev: v0.15.2
44
hooks:
5-
- id: ruff
5+
- id: ruff-check
66
args: [--fix]
77

88
- repo: https://github.com/psf/black

src/binary_tree/dfs/leaf_similar_trees/__init__.py

Whitespace-only changes.
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
from structures import TreeNode
2+
from itertools import zip_longest
3+
from typing import Optional
4+
5+
6+
class Solution:
7+
def get_leaves(self, root: TreeNode) -> list:
8+
if root:
9+
if not root.left and not root.right:
10+
yield [root.val]
11+
yield from self.get_leaves(root.right)
12+
yield from self.get_leaves(root.left)
13+
14+
def leafSimilar(self, root1: Optional[TreeNode], root2: Optional[TreeNode]) -> bool:
15+
sentinel = object()
16+
return all(
17+
a == b
18+
for a, b in zip_longest(
19+
self.get_leaves(root1), self.get_leaves(root2), fillvalue=sentinel
20+
)
21+
)

tests/test_leaf_similar_trees.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import pytest
2+
from src.binary_tree.dfs.leaf_similar_trees.solution import Solution
3+
from test_utils import TreeBuilder
4+
5+
6+
@pytest.mark.parametrize(
7+
"root1, root2, expected",
8+
[
9+
(
10+
[3, 5, 1, 6, 2, 9, 8, None, None, 7, 4],
11+
[3, 5, 1, 6, 7, 4, 2, None, None, None, None, None, None, 9, 8],
12+
True,
13+
),
14+
([1, 2, 3], [1, 3, 2], False),
15+
],
16+
)
17+
def test_leaf_similar(root1: list, root2: list, expected: bool):
18+
root1 = TreeBuilder.from_list(root1)
19+
root2 = TreeBuilder.from_list(root2)
20+
solution = Solution()
21+
assert solution.leafSimilar(root1, root2) == expected

0 commit comments

Comments
 (0)