Skip to content

Commit 6b89fa8

Browse files
committed
adding algo
1 parent cffab73 commit 6b89fa8

5 files changed

Lines changed: 177 additions & 0 deletions

File tree

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
from typing import List, Union, Collection, Mapping, Optional
2+
from abc import ABC, abstractmethod
3+
4+
class Solution:
5+
def twoSum(self, nums: List[int], target: int) -> List[int]:
6+
7+
answer = dict()
8+
9+
for k, v in enumerate(nums):
10+
11+
if v in answer:
12+
return [answer[v], k]
13+
else:
14+
answer[target - v] = k
15+
16+
return []
17+
18+
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
from typing import List, Union, Collection, Mapping, Optional
2+
from abc import ABC, abstractmethod
3+
import re
4+
5+
class Solution:
6+
def isPalindrome(self, s: str) -> bool:
7+
8+
# To lowercase
9+
s = s.lower()
10+
11+
# Remove non-alphanumeric characters
12+
s = re.sub(pattern=r'[^a-zA-Z0-9]', repl='', string=s)
13+
14+
# Determine if s is palindrome or not
15+
len_s = len(s)
16+
17+
for i in range(len_s//2):
18+
19+
if s[i] != s[len_s - 1 - i]:
20+
return False
21+
22+
return True
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
from typing import List, Union, Collection, Mapping, Optional
2+
from abc import ABC, abstractmethod
3+
from collections import deque
4+
5+
class TreeNode:
6+
def __init__(self, val=0, left=None, right=None):
7+
self.val = val
8+
self.left = left
9+
self.right = right
10+
11+
class Solution:
12+
def averageOfLevels(self, root: Optional[TreeNode]) -> List[float]:
13+
if not root:
14+
return []
15+
16+
q = deque()
17+
q.append(root)
18+
answer = list()
19+
20+
21+
while q:
22+
qlen = len(q)
23+
row = 0
24+
for i in range(qlen):
25+
root: Optional[TreeNode] = q.popleft()
26+
row += root.val
27+
if root.left: q.append(root.left)
28+
if root.right: q.append(root.right)
29+
answer.append(row/qlen)
30+
31+
return answer
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import { TreeNode } from './TreeNode';
2+
3+
function averageOfLevels(root: TreeNode | null): number[] {
4+
if (!root) {
5+
return [];
6+
}
7+
8+
const queue: TreeNode[] = [];
9+
queue.push(root);
10+
const answer: number[] = [];
11+
12+
while (queue.length > 0) {
13+
const qlen = queue.length;
14+
let row = 0;
15+
16+
for (let i = 0; i < qlen; i++) {
17+
const node = queue.shift()!;
18+
row += node.val;
19+
20+
if (node.left) queue.push(node.left);
21+
if (node.right) queue.push(node.right);
22+
}
23+
24+
answer.push(row / qlen);
25+
}
26+
27+
return answer;
28+
}
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
import unittest
2+
from src.my_project.interviews.top_150_questions_round_22\
3+
.ex_80_average_of_levels_in_binary_tree import Solution, TreeNode
4+
5+
class AverageOfLevelsInBinaryTreeTestCase(unittest.TestCase):
6+
7+
def create_binary_tree(self, values):
8+
"""
9+
Helper function to create a binary tree from a list of values (level-order).
10+
11+
:param values: List of node values (None represents null nodes)
12+
:return: Root of the binary tree
13+
"""
14+
if not values:
15+
return None
16+
17+
root = TreeNode(values[0])
18+
queue = [root]
19+
i = 1
20+
21+
while queue and i < len(values):
22+
node = queue.pop(0)
23+
24+
if i < len(values) and values[i] is not None:
25+
node.left = TreeNode(values[i])
26+
queue.append(node.left)
27+
i += 1
28+
29+
if i < len(values) and values[i] is not None:
30+
node.right = TreeNode(values[i])
31+
queue.append(node.right)
32+
i += 1
33+
34+
return root
35+
36+
def test_example_1(self):
37+
# Example 1: Input: root = [3,9,20,null,null,15,7]
38+
# Output: [3.00000,14.50000,11.00000]
39+
# Explanation: The average value of nodes on level 0 is 3,
40+
# on level 1 is 14.5, and on level 2 is 11.
41+
solution = Solution()
42+
root = self.create_binary_tree([3, 9, 20, None, None, 15, 7])
43+
result = solution.averageOfLevels(root)
44+
expected = [3.00000, 14.50000, 11.00000]
45+
self.assertEqual(len(result), len(expected))
46+
for i in range(len(result)):
47+
self.assertAlmostEqual(result[i], expected[i], places=5)
48+
49+
def test_example_2(self):
50+
# Example 2: Input: root = [3,9,20,15,7]
51+
# Output: [3.00000,14.50000,11.00000]
52+
solution = Solution()
53+
root = self.create_binary_tree([3, 9, 20, 15, 7])
54+
result = solution.averageOfLevels(root)
55+
expected = [3.00000, 14.50000, 11.00000]
56+
self.assertEqual(len(result), len(expected))
57+
for i in range(len(result)):
58+
self.assertAlmostEqual(result[i], expected[i], places=5)
59+
60+
def test_empty_tree(self):
61+
# Test with empty tree
62+
# Output: []
63+
solution = Solution()
64+
root = self.create_binary_tree([])
65+
result = solution.averageOfLevels(root)
66+
self.assertEqual(result, [])
67+
68+
def test_single_node(self):
69+
# Test with single node
70+
# Input: root = [5]
71+
# Output: [5.00000]
72+
solution = Solution()
73+
root = self.create_binary_tree([5])
74+
result = solution.averageOfLevels(root)
75+
expected = [5.00000]
76+
self.assertEqual(len(result), len(expected))
77+
for i in range(len(result)):
78+
self.assertAlmostEqual(result[i], expected[i], places=5)

0 commit comments

Comments
 (0)