깊이 우선 순회(Depth First Traversal)

깊이 우선 순회는 다시 중위 순회(In-order Traversal), 전위 순회, 후위 순회로 나누어진다.


  • 중위 순회(In-order Traversal)

중위 순회는 (1)Left subtree $\rightarrow$ (2)자기 자신 $\rightarrow$ (3)Right subtree 순으로 순회한다.

class Node:
  def inorder(self):
    traversal = []
    if self.left:
      traversal += self.left.inorder()
    traversal.append(self.data)
    if self.right:
      traversal += self.right.inorder()
    return traversal    
class BinaryTree:
  def inorder(self):
    if self.root:
      return self.root.inorder()
    else:
      return []


  • 전위 순회(Pre-order Traversal)

전위 순회는 (1)자기 자신 $\rightarrow$ (2)Left subtree $\rightarrow$ (3)Right subtree 순으로 순회한다. 구현은 앞서 inorder와 같은 방식으로 쉽게 할 수 있다.


  • 후위 순회(Post-order Traversal)

후위 순회는 (1)Left subtree $\rightarrow$ (2)Right subtree $\rightarrow$ (3)자기 자신 순으로 순회한다. 이 역시 앞서 inorder와 같은 방식으로 구현을 쉽게 할 수 있다.