diff --git a/src/binary_tree/bfs/__init__.py b/src/binary_tree/bfs/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/binary_tree/bfs/binary_tree_right_side_view/__init__.py b/src/binary_tree/bfs/binary_tree_right_side_view/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/binary_tree/bfs/binary_tree_right_side_view/solution.py b/src/binary_tree/bfs/binary_tree_right_side_view/solution.py new file mode 100644 index 0000000..8374acc --- /dev/null +++ b/src/binary_tree/bfs/binary_tree_right_side_view/solution.py @@ -0,0 +1,22 @@ +from typing import Optional, List +from collections import deque +from structures import TreeNode + + +class Solution: + def rightSideView(self, root: Optional[TreeNode]) -> List[int]: + result = [] + q = deque() + q.append(root) + + while q: + right_side = None + for _ in range(len(q)): + node = q.popleft() + if node: + right_side = node + q.append(node.left) + q.append(node.right) + if right_side: + result.append(right_side.val) + return result diff --git a/tests/test_binary_tree_right_side_view.py b/tests/test_binary_tree_right_side_view.py new file mode 100644 index 0000000..af55dc4 --- /dev/null +++ b/tests/test_binary_tree_right_side_view.py @@ -0,0 +1,18 @@ +import pytest +from src.binary_tree.bfs.binary_tree_right_side_view.solution import Solution +from test_utils import TreeBuilder + + +@pytest.mark.parametrize( + "root, expected", + [ + ([1, 2, 3, None, 5, None, 4], [1, 3, 4]), + ([1, 2, 3, 4, None, None, None, 5], [1, 3, 4, 5]), + ([1, None, 3], [1, 3]), + ([], []), + ], +) +def test_max_depth(root, expected): + root = TreeBuilder.from_list(root) + solution = Solution() + assert solution.rightSideView(root) == expected