자료구조와 알고리즘/🥑알고리즘

[알고리즘][트리] - 4. 이진 트리 반전

얄루몬 2022. 6. 20. 22:41

📖이 포스팅은 '파이썬 알고리즘 인터뷰 - 박상길님' 책을 보고 작성되었습니다.


😎문제 : https://leetcode.com/problems/invert-binary-tree/submissions/

중앙을 기준으로 이진 트리를 반전시키는 문제


[반복 구조로 BFS]

import collections

class Solution:
    def invertTree(self, root: Optional[TreeNode]) -> Optional[TreeNode]:
        queue = collections.deque([root])

        while queue:
            node = queue.popleft()
            if node:
                node.left, node.right = node.right, node.left

                queue.append(node.left)
                queue.append(node.right)

        return root
  • 부모 노드부터 스왑하며 계속 아래로 내려가는 하향(Top-Down)방식이다.

[반복 구조로 DFS - stack]

import collections

class Solution:
    def invertTree(self, root: Optional[TreeNode]) -> Optional[TreeNode]:
        stack = collections.deque([root])

        while stack:
            node = stack.pop()
            if node:
                node.left, node.right = node.right, node.left

                stack.append(node.left)
                stack.append(node.right)

        return root

[가장 파이썬 다운 방식]

import collections

class Solution:
    def invertTree(self, root: Optional[TreeNode]) -> Optional[TreeNode]:
        if root:
            root.left, root.right = self.invertTree(root.right), self.invertTree(root.left)
            
            return root