[leetcode-python3] 103. Binary Tree Zigzag Level Order Traversal

shsh·2021년 1월 3일
0

leetcode

목록 보기
62/161

103. Binary Tree Zigzag Level Order Traversal - python3

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).

Approach 1:

어제의 105. Construct Binary Tree from Preorder and Inorder Traversal 이 아이 생각도 나고... 눈물이 날 뻔 했읍니다...

queue 와 level 을 이용하자 했지만 구체화 실패..로 루션이를 모시기로~...
+) 큐의 구조를 listnode 와 착각해서 더 꼬임;

Solution 1: Runtime: 36 ms - 31.96% / Memory Usage: 14.6 MB - 33.50%

# 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 에 넣음

솔루션 보고 나니 생각보다 쉬운 편이라 당황스럽...;
이거도 외우는게 좋을듯

profile
Hello, World!

0개의 댓글

관련 채용 정보

Powered by GraphCDN, the GraphQL CDN