Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit d233c9c

Browse files
Merge pull request #14 from mihirs16/master
added leetcode questions
2 parents c385b2a + 1405ca6 commit d233c9c

4 files changed

+116
-0
lines changed
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
# find if path exists in a graph | leetcode 1971 | https://leetcode.com/problems/find-if-path-exists-in-graph/
2+
# method: adjacency list, visited and toVisit lists
3+
4+
from collections import defaultdict
5+
6+
class Solution:
7+
def validPath(self, n: int, edges: list[list[int]], source: int, destination: int) -> bool:
8+
# edge case
9+
if n == 1 and source == destination:
10+
return True
11+
12+
edgeMap = defaultdict(list) # adjacency list
13+
for edge in edges:
14+
edgeMap[edge[0]].append(edge[1])
15+
edgeMap[edge[1]].append(edge[0])
16+
17+
visited = set() # set of visited nodes
18+
toVisit = [edgeMap[source]] # set of nodes to visit
19+
20+
# while there are nodes to visit
21+
while toVisit:
22+
23+
# this node is now visited
24+
nodes = toVisit.pop()
25+
26+
# for each node in the adjacent nodes
27+
for node in nodes:
28+
if node == destination:
29+
return True
30+
31+
# if node wasn't visited
32+
# visit its adjacent nodes
33+
elif node not in visited:
34+
visited.add(node)
35+
toVisit.append(edgeMap[node])
36+
37+
# if node was visited
38+
# do nothing
39+
40+
# if no more nodes to visit
41+
# and still no path
42+
return False
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
# count nodes equal to average of subtree | leetcode 2265 | https://leetcode.com/problems/count-nodes-equal-to-average-of-subtree/
2+
# method: dfs, update size and sum of subtree at each node and check for average
3+
4+
# Definition for a binary tree node.
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 averageOfSubtree(self, root: list[TreeNode]) -> int:
13+
self.counter = 0
14+
def dfs(node):
15+
if node is None:
16+
return 0, 0
17+
18+
lSize, lSum = dfs(node.left)
19+
rSize, rSum = dfs(node.right)
20+
21+
nSize, nSum = lSize + rSize + 1, lSum + rSum + node.val
22+
if (nSum // nSize) == node.val:
23+
self.counter += 1
24+
25+
return nSize, nSum
26+
27+
dfs(root)
28+
return self.counter
29+
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
# evaluate boolean binary tree | leetcode 2331 | https://leetcode.com/problems/evaluate-boolean-binary-tree/
2+
# method: dfs, evaluate left and/or right, return node's value
3+
4+
# Definition for a binary tree node.
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 evaluateTree(self, node):
13+
if node.left is None and node.right is None:
14+
return node.val
15+
16+
if node.val == 2:
17+
node.val = bool(self.evaluateTree(node.left)) or bool(self.evaluateTree(node.right))
18+
19+
if node.val == 3:
20+
node.val = bool(self.evaluateTree(node.left)) and bool(self.evaluateTree(node.right))
21+
22+
return node.val
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
# lowest common ancestor in binary search tree | leetcode 235 | https://leetcode.com/problems/lowest-common-ancestor-of-a-binary-search-tree/
2+
# method: iteration through each node, when p and q are in different subtrees, current node is LCA
3+
4+
# Definition for a binary tree node.
5+
class TreeNode:
6+
def __init__(self, x):
7+
self.val = x
8+
self.left = None
9+
self.right = None
10+
11+
class Solution:
12+
def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode':
13+
cur = root
14+
15+
while cur:
16+
if p.val > cur.val and q.val > cur.val:
17+
cur = cur.right
18+
elif p.val < cur.val and q.val < cur.val:
19+
cur = cur.left
20+
else:
21+
return cur
22+
23+
return root

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /