Skip to content

Commit 72c58fb

Browse files
author
Mauricio Klein
committed
Add solution for challenge #58
1 parent 1a574a7 commit 72c58fb

6 files changed

Lines changed: 71 additions & 0 deletions

File tree

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,3 +57,4 @@
5757
- [x] [Challenge 55: Merge list of number into ranges](challenge-55/)
5858
- [x] [Challenge 56: Find largest BST](challenge-56/)
5959
- [x] [Challenge 57: Arithmetic Binary Tree](challenge-57/)
60+
- [x] [Challenge 58: Get all Values at a Certain Height in a Binary Tree](challenge-58/)

challenge-58/Makefile

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
test:
2+
python test_*.py
3+
4+
.PHONY: test

challenge-58/README.md

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
# Get all Values at a Certain Height in a Binary Tree
2+
3+
This problem was asked by Amazon.
4+
5+
## Description
6+
7+
Given a binary tree, return all values given a certain height h.
8+
9+
## Example
10+
11+
```
12+
1
13+
/ \
14+
2 3
15+
/ \ \
16+
4 5 7
17+
18+
h = 3
19+
20+
Output: [4, 5, 7]
21+
```
22+

challenge-58/__init__.py

Whitespace-only changes.

challenge-58/solver.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
class Node(object):
2+
def __init__(self, v, left=None, right=None):
3+
self.v = v
4+
self.left = left
5+
self.right = right
6+
7+
#
8+
# Time complexity: O(n) (every element is visited at most once)
9+
# Space complexity: O(n) (worst case, considering "height" equal to the tree's depth)
10+
#
11+
def values_at_height(node, height):
12+
if not node:
13+
return []
14+
15+
if height == 1:
16+
return [node.v]
17+
else:
18+
left = values_at_height(node.left, height - 1)
19+
right = values_at_height(node.right, height - 1)
20+
21+
return left + right

challenge-58/test_solver.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import unittest
2+
import solver
3+
from solver import Node, values_at_height
4+
5+
class TestSolver(unittest.TestCase):
6+
def test_values_at_height(self):
7+
root = Node(1)
8+
self.assertEqual(values_at_height(root, 1), [1])
9+
10+
root = Node(1, Node(2), Node(3))
11+
self.assertEqual(values_at_height(root, 2), [2, 3])
12+
13+
root = Node(1, Node(3))
14+
self.assertEqual(values_at_height(root, 2), [3])
15+
16+
root = Node(1, Node(2), Node(3))
17+
self.assertEqual(values_at_height(root, 5), [])
18+
19+
root = Node(1, Node(2, Node(4), Node(5)), Node(3, right=Node(7)))
20+
self.assertEqual(values_at_height(root, 3), [4, 5, 7])
21+
22+
if __name__ == "__main__":
23+
unittest.main()

0 commit comments

Comments
 (0)