Skip to content

Commit 9518f76

Browse files
authored
Feature/104 maximum depth of binary tree (#37)
* feat: [LeetCode #104] Maximum Depth of Binary Tree Тип: Binary Tree Сложность: easy Временная сложность: O(n) Пространственная сложность: O(1) - Ссылка: https://leetcode.com/problems/maximum-depth-of-binary-tree/ * fix: black reformatting
1 parent d905acf commit 9518f76

10 files changed

Lines changed: 67 additions & 2 deletions

File tree

src/binary_tree/__init__.py

Whitespace-only changes.

src/binary_tree/dfs/__init__.py

Whitespace-only changes.

src/binary_tree/dfs/maximum_depth_of_binary_tree/__init__.py

Whitespace-only changes.
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
from typing import Optional
2+
from structures import TreeNode
3+
4+
5+
class Solution:
6+
def maxDepth(self, root: Optional[TreeNode]) -> int:
7+
if not root:
8+
return 0
9+
return 1 + max(self.maxDepth(root.left), self.maxDepth(root.right))

src/stack/decode_string/solution.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@ def decodeString(self, s: str) -> str:
66
for char in s:
77
if char.isdigit():
88
number.append(char)
9-
elif char == '[':
9+
elif char == "[":
1010
stack.append("".join(number))
1111
number = []
12-
elif char == ']':
12+
elif char == "]":
1313
alphas = []
1414
while stack[-1].isalpha():
1515
alphas.append(stack.pop())

structures/__init__.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
from .tree import TreeNode
2+
3+
__all__ = ["TreeNode"]

structures/tree.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
class TreeNode:
2+
def __init__(self, val: int = 0, left: int | None = None, right: int | None = None):
3+
self.val = val
4+
self.left = left
5+
self.right = right

test_utils/__init__.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
from .tree_builder import TreeBuilder
2+
3+
__all__ = ["TreeBuilder"]

test_utils/tree_builder.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
from collections import deque
2+
from typing import Optional
3+
from structures import TreeNode
4+
5+
6+
class TreeBuilder:
7+
@staticmethod
8+
def from_list(values: list[Optional[int]]) -> Optional[TreeNode]:
9+
if not values or values[0] is None:
10+
return None
11+
12+
root = TreeNode(values[0])
13+
queue = deque([root])
14+
i = 1
15+
16+
while queue and i < len(values):
17+
node = queue.popleft()
18+
19+
if i < len(values) and values[i] is not None:
20+
node.left = TreeNode(values[i])
21+
queue.append(node.left)
22+
i += 1
23+
24+
if i < len(values) and values[i] is not None:
25+
node.right = TreeNode(values[i])
26+
queue.append(node.right)
27+
i += 1
28+
29+
return root
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import pytest
2+
from src.binary_tree.dfs.maximum_depth_of_binary_tree.solution import Solution
3+
from test_utils import TreeBuilder
4+
5+
6+
@pytest.mark.parametrize(
7+
"root, expected",
8+
[
9+
([3, 9, 20, None, None, 15, 7], 3),
10+
([1, None, 2], 2),
11+
],
12+
)
13+
def test_max_depth(root, expected):
14+
root = TreeBuilder.from_list(root)
15+
solution = Solution()
16+
assert solution.maxDepth(root) == expected

0 commit comments

Comments
 (0)