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).
어제의 105. Construct Binary Tree from Preorder and Inorder Traversal 이 아이 생각도 나고... 눈물이 날 뻔 했읍니다...
queue 와 level 을 이용하자 했지만 구체화 실패..로 루션이를 모시기로~...
+) 큐의 구조를 listnode 와 착각해서 더 꼬임;
# 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 root is None:
return[]
result = []
level = 0
queue = [root]
while queue:
length=len(queue)
ans=[]
level=level+1
while length>0:
node=queue.pop(0)
if node.left:
queue.append(node.left)
if node.right:
queue.append(node.right)
length=length-1
ans.append(node.val)
if level%2==0:
ans.reverse()
result.append(ans)
else:
result.append(ans)
return result
<while queue: 부분>
1. queue 에 root 를 넣어줌
2. 반복문1 돌때마다 queue 의 길이를 구하고 level 은 1 씩 증가
3. length 만큼 반복문2 를 돌려줌
4. 가장 처음 값을 pop 해서 left 와 right 값을 넣어준다
5. 길이는 ans 에도 순차적으로 값을 넣어줌
6. level 이 짝수번째면 reverse 해주고 (left -> right / right -> left) result 에 넣음
솔루션 보고 나니 생각보다 쉬운 편이라 당황스럽...;
이거도 외우는게 좋을듯