[회고] 신입 iOS 개발자가 되기까지 feat. 카카오 자세히보기

💻 CS/알고리즘 연습

[알고리즘 연습] 이진트리 깊이별로 나누기

inu 2020. 7. 24. 18:00
반응형

이진트리 깊이별로 나누기

  • 이진트리의 root노드를 파라미터로 주었을 때 그를 기반으로 깊이별 요소들을 각각 리스트로 저장해 가지는 이차원 리스트를 리턴해라

import queue

class Node():
    def __init__(self, val):
        self.val = val
        self.left = None
        self.right = None
        
def printTree(node):
    all_lines = []
    line = []

    q = queue.Queue()
    q.put(node)
    q.put(Node(-1))

    while q.qsize() > 0:
        node = q.get()        
        if not node:
            continue
        else:
            if node.val == -1: # 새 리스트 생성
                if q.qsize() > 0:
                    all_lines.append(line)
                    line = []
                    q.put(Node(-1))
            else:
                line.append(node.val)
                q.put(node.left)
                q.put(node.right)
    return all_lines    
   1
 2   3
4 5 6 7 
==위 형태의 트리구조의 root노드를 파라미터에 넣어줬을 때 결과==
[[1], [2,3], [4,5,6,7]
  • 저장된 데이터로부터 값을 순서대로 가져와야 하지만 그 값을 바로바로 처리할 순 없고, 순서는 유지해야할 때 큐나 스택을 사용하는 방법을 고민해볼 필요가 있다.
  • BFS, DFS 적용에 익숙해지자
  • 큐와 스택을 저장한 순서를 유지하여 '가장 먼저 넣어줬던 값' 혹은 '가장 최근에 넣어줬던 값'을 활용할 수 있도록 해준다.
  • 해당 문제에선 각 깊이별로 구분이 필요했기 때문에 -1값을 가지는 노드로 그를 구분했다. (물론 다른 방법을 사용해도 상관없다.)
반응형