5 files changed

+127
-11
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
class Solution:
2+
def findMaxConsecutiveOnes(self, nums: List[int]) -> int:
3+
maxConZeros = 0
4+
left = 0
5+
flips = 1
6+
zeros = 0
7+
8+
for right in range(len(nums)):
9+
if nums[right] == 0:
10+
zeros += 1
11+
12+
while zeros > flips:
13+
if nums[left] == 0:
14+
zeros -= 1
15+
left += 1
16+
17+
maxConZeros = max(right - left + 1, maxConZeros)
18+
19+
return maxConZeros
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,22 @@
1+
from collections import deque
2+
13
class Solution:
2-
def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode':
4+
def connect(self, root: 'Node') -> 'Node':
35
if not root: return None
4-
if root.val == p.val or root.val == q.val:
5-
return root
66

7-
left = self.lowestCommonAncestor(root.left, p, q)
8-
right = self.lowestCommonAncestor(root.right, p, q)
7+
q = deque()
8+
q.append(root)
99

10-
if left and right:
11-
return root
10+
while q:
11+
level = []
12+
for _ in range(len(q)):
13+
node = q.popleft()
14+
level.append(node)
15+
if node.left:
16+
q.append(node.left)
17+
if node.right:
18+
q.append(node.right)
19+
for i in range(len(level) - 1):
20+
level[i].next = level[i+1]
1221

13-
if not left and not right:
14-
return None
15-
16-
return left or right
22+
return root
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
class Solution:
2+
def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode':
3+
if not root: return None
4+
if root.val == p.val or root.val == q.val:
5+
return root
6+
7+
left = self.lowestCommonAncestor(root.left, p, q)
8+
right = self.lowestCommonAncestor(root.right, p, q)
9+
10+
if left and right:
11+
return root
12+
13+
if not left and not right:
14+
return None
15+
16+
return left or right
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
class Solution:
2+
def countUnivalSubtrees(self, root: TreeNode) -> int:
3+
self.count = 0
4+
self.dfs(root)
5+
return self.count
6+
7+
def dfs(self, node):
8+
if not node:
9+
return
10+
11+
if self.isUniVal(node, node.val):
12+
self.count += 1
13+
14+
self.dfs(node.left)
15+
self.dfs(node.right)
16+
17+
def isUniVal(self, node, val):
18+
if node is None: return True
19+
20+
if (node.left is None and
21+
node.right is None and
22+
node.val == val):
23+
return True
24+
25+
return (node.val == val and
26+
self.isUniVal(node.left, val) and
27+
self.isUniVal(node.right, val))
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
from collections import deque
2+
3+
class TreeNode(object):
4+
def __init__(self, x):
5+
self.val = x
6+
self.left = None
7+
self.right = None
8+
9+
class Codec:
10+
11+
def serialize(self, root):
12+
"""Encodes a tree to a single string.
13+
14+
:type root: TreeNode
15+
:rtype: str
16+
"""
17+
if root is None: return "X,"
18+
19+
left = self.serialize(root.left)
20+
right = self.serialize(root.right)
21+
22+
return str(root.val) + "," + left + right
23+
24+
25+
def deserialize(self, data):
26+
"""Decodes your encoded data to tree.
27+
28+
:type data: str
29+
:rtype: TreeNode
30+
"""
31+
data = data.split(",")[0:-1]
32+
nodes_left = deque()
33+
for val in data:
34+
nodes_left.append(val)
35+
36+
def helper(nodes):
37+
val = nodes.popleft()
38+
39+
if val == "X":
40+
return None
41+
42+
node = TreeNode(int(val))
43+
node.left = helper(nodes)
44+
node.right = helper(nodes)
45+
46+
return node
47+
48+
return helper(nodes_left)

0 commit comments

Comments
 (0)