코딩 테스트 및 알고리즘/leetcode for google

leetcode medium : Binary Tree Zigzag level Order Traversal

띠리링구 2022. 5. 16. 00:11

Binary Tree Zigzag Level Order Traversal - LeetCode

 

Binary Tree Zigzag Level Order Traversal - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

 

전 포스팅(leetcode medium : binary Tree Level Order Traversal :: Keep your pace (tistory.com))

에서 풀었던 문제랑 크게 다를게 없는데? result 리스트에 추가할 때 뒤집어주기만 하면 되겠는걸?

 

class Solution:
    def zigzagLevelOrder(self, root: Optional[TreeNode]) -> List[List[int]]:
        if not root:
            return []
        
        level = [root]
        right = True
        
        result = []
        while level:
            result.append(list(map(lambda x : x.val, level)) if right else reversed(list(map(lambda x : x.val, level))))
            right = not right
            
            nlevel = []
            for node in level:
                if node.left:
                    nlevel.append(node.left)
                if node.right:
                    nlevel.append(node.right)
            
            level = nlevel
            
        return result

 

위 코드는 속도는 빠른데 가독성이 안좋다

class Solution:
    def zigzagLevelOrder(self, root: Optional[TreeNode]) -> List[List[int]]:
        if not root:
            return []
        
        level = [root]
        right = True
        
        result = []
        while level:
            to_add = list(map(lambda x : x.val, level))
            if right:
                result.append(to_add)
            else:
                result.append(reversed(to_add))
            right = not right
            
            nlevel = []
            for node in level:
                if node.left:
                    nlevel.append(node.left)
                if node.right:
                    nlevel.append(node.right)
            
            level = nlevel
            
        return result