트리와 이진트리

Reading time ~1 minute

인프런의 영리한 프로그래밍을 위한 알고리즘 강좌를 보고 작성한 문서입니다.

트리(Tree)

계층적인 구조를 표현

  • 조직도, 디렉토리와 서브디렉토리 구조, 가계도…

  • 트리는 노드(node)들과 노드들을 연결하는 링크(link)들로 구성됨.

부모-자식 관계

  • 부모: 위에 있는 노드
  • 자식: 아래 있는 노드

형제관계

  • 부모가 같은 노드들(루트노드를 제외한 트리의 모든 노드들은 유일한(하나의) 부모 노드를 가진다.)

리프(leaf) 노드

  • 자식이 없는 노드들

조상-자손 관계

  • 부모-자식의 관계를 확대

부트리(sub tree)

  • 트리의 일부를 잘라서 부분만 봐도 하나의 트리이다(전체의 일부분인 트리)

레벨

  • 루트에서 밑으로 내려간 정도(0 또는 1부터 시작)

높이

  • 서로 다른 레벨의 갯수

트리의 기본적인 성질

  • 노드가 N개인 트리는 항상 N-1개의 링크(link)를 가진다.
  • 트리에서 루트에서 어떤 노드로 가는 경로는 유일하다. 또한 임의의 두 노드간의 결로도 유일하다.(같은 노드를 두번 이상 방문하지 않는다는 조건하에)

이진 트리(binary tree)

  • 이진 트레에서 각 노드는 최대 2개의 자식을 가진다.

  • 각각의 자식 노드는 자신이 부모의 왼쪽 자식인지 오른쪽 자식인지가 지정된다.(자식이 한 명인 경우에도)

    <이진 트리 응용의 예>
    expression_tree


Full and Complete Binary Trees

full_and_complete_tree

linked_structure


이진트리의 순회(traversal)

  • 순회: 이진 트리의 모든 노드를 방문하는 일

  • 중순위(inorder) 순회(왼쪽,루트,오른쪽)
  • 선순위(preorder) 순회(루트,왼쪽,오른쪽)
  • 후순위(postorder) 순회(왼쪽,오른쪽,루트)
  • 레벨오더(level-order) 순회

  • Inorder-순회

    inorder

    inorder_O

  • Preorder & Postorder순회

    pre_post

    방문하는 순서만 바뀐다.

  • Expression Trees

    order_sample

  • Level-Order 순회

    • 레벨 순으로 방문, 동일 레벨에서는 왼쪽에서 오른쪽 순서로

    • 큐(queue)를 이용하여 구현

    level_order

    level_order2