728x90
Top Interview Questions 의 Medium Collection에 있는 문제입니다.         
문제는 여기서 볼 수 있습니다.

 

Given the root of a binary tree, return the zigzag level order traversal of its nodes' values. (i.e., from left to right, then right to left for the next level and alternate between).

 

Example 1:

Input: root = [3,9,20,null,null,15,7]
Output: [[3],[20,9],[15,7]]

Example 2:

Input: root = [1]
Output: [[1]]

Example 3:

Input: root = []
Output: []

 

Constraints:

  • The number of nodes in the tree is in the range [0, 2000].
  • -100 <= Node.val <= 100

 

Code:

# 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: Optional[TreeNode]) -> List[List[int]]:
        if not root: return root
        answer, curr_level, flag = [], [root], 1
        while curr_level:
            answer.append([node.val for node in curr_level][::flag])
            next_level = []
            for node in curr_level:
                if node.left: next_level.append(node.left)
                if node.right: next_level.append(node.right)
            curr_level = next_level[:]
            flag *= -1
                
        return answer

 

Binary Tree Level Order Traversal 이 문제에서 살짝 변형된 스타일의 문제입니다.
Binary Tree Level Order Traversal은 각 레벨의 노드 값들을 순서대로 담았다면, 본 문제에서는 매 레벨마다 담는 순서를 바꿉니다. 루트 노드(첫 레벨)를 하나의 리스트에 담은 후 다음 리스트에는 두번째 레벨의 노드 값들을 역순으로 담습니다.
그러기 위해서 flag라는 변수를 추가하여 매 루프마다 리스트 값들을 나열하는 순서를 바꿔줍니다.

 

728x90

'알고리즘' 카테고리의 다른 글

[Leetcode/Python] 3Sum  (0) 2022.12.07
[Leetcode/Python] Factorial Trailing Zeroes  (0) 2022.11.30
[Leetcode/Python] Unique Paths  (0) 2022.11.29
[Leetcode/Python] Happy Number  (0) 2022.11.29
[Leetcode/Python] Jump Game  (0) 2022.11.25