-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathm2415 v1 level order.py
33 lines (27 loc) · 1.17 KB
/
m2415 v1 level order.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def reverseOddLevels(self, root: Optional[TreeNode]) -> Optional[TreeNode]:
if not root or not root.left : # we are promised that every level is filled
return root
level = 0
nodes = (deque(), deque())
nodes[0].append(root.left)
nodes[0].append(root.right)
while nodes[level] :
if nodes[level][0].left and nodes[level][0].left.left :
for node in nodes[level] :
nodes[(level + 1) % 2].append(node.left.left)
nodes[(level + 1) % 2].append(node.left.right)
nodes[(level + 1) % 2].append(node.right.left)
nodes[(level + 1) % 2].append(node.right.right)
while nodes[level] :
nodes[level][0].val, nodes[level][-1].val = nodes[level][-1].val, nodes[level][0].val
nodes[level].popleft()
nodes[level].pop()
level = (level + 1) % 2
return root