더북(TheBook)

이제 재귀 함수를 이용해 각 순회를 구현해 볼까요?

코드 13-10 data_structure_2/ds_3/binary_tree.py ⑥ (BinaryTree 클래스 ③)

    # 전위 순회로 트리를 순회
    # 인자(cur: 방문 노드, func: 데이터 처리 함수)
    def preorder_traverse(self, cur, func):
        # 탈출 조건
        # 방문한 노드가 빈 노드일 때
        if not cur:
            return

        # 먼저 방문 노드의 데이터를 인자로 함수 호출
        func(cur.data)
        # 왼쪽 서브 트리 순회
        self.preorder_traverse(cur.left, func)
        # 오른쪽 서브 트리 순회
        self.preorder_traverse(cur.right, func)

    # 중위 순회로 트리를 순회
    # 인자(cur: 방문 노드, func: 데이터 처리 함수)
    def inorder_traverse(self, cur, func):
        # 탈출 조건
        if not cur:
            return

        # 먼저 왼쪽 서브 트리를 순회
        self.inorder_traverse(cur.left, func)
        # 왼쪽 서브 트리를 모두 순회한 후
        # 방문 노드의 데이터를 인자로 함수 호출
        func(cur.data)
        # 오른쪽 서브 트리 순회
        self.inorder_traverse(cur.right, func)

    # 후위 순회로 트리를 순회
    # 인자(cur: 방문 노드, func: 데이터 처리 함수)
    def postorder_traverse(self, cur, func):
        # 탈출 조건
        if not cur:
            return

        # 왼쪽 서브 트리 순회
        self.postorder_traverse(cur.left, func)
        # 오른쪽 서브 트리 순회
        self.postorder_traverse(cur.right, func)
        # 왼쪽 서브 트리와 오른쪽 서브 트리를 모두 순회한 후
        # 마지막으로 방문 노드의 데이터를 인자로 함수 호출
        func(cur.data)
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.