알고리즘/LeetCode
[LeetCode] Binary Tree Zigzag Level Order Traversal
Tsoo
2020. 7. 23. 12:59
Given a binary tree, return the zigzag level order traversal of its nodes' values. (ie, from left to right, then right to left for the next level and alternate between).
For example:
Given binary tree [3,9,20,null,null,15,7],
return its zigzag level order traversal as:
[ [3], [20,9], [15,7] ]
Solution
1. root를 담은 q가 있는동안 반복한다.
2. q의 길이를 cnt로 놓고 cnt가 있는 동안 반복문을 실행한다.
3. q의 가장 첫번째를 pop하여 그 value값을 tmp에 담고, left또는 right가 있으면 그 값을 q에 담아 다음 depth도 처리한다.
4. cnt반복문이 한번 끝났을 경우 leftToRight로 왼쪽에서부터 결과를 담을지, 오른쪽에서부터 결과를 담을지 판단한다.
5. root가 없을경우 예외처리도 해준다.
#(6) Binary Tree Zigzag Level Order Traversal
# 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 zigzagLevelOrder(self, root: TreeNode) -> List[List[int]]:
if not root:
return []
result = []
q = [root]
leftToRight = True
while q:
tmp = []
cnt = len(q)
while cnt:
node = q.pop(0)
tmp.append(node.val)
if node.left:
q.append(node.left)
if node.right:
q.append(node.right)
cnt -= 1
if leftToRight:
result.append(tmp)
leftToRight = False
else:
result.append(tmp[::-1])
leftToRight = True
return result