[자료구조] 트리(Tree)란

2021. 10. 10. 03:42·❕Data structure
-->

 

이번에는 자료구조 중 하나인 트리(Tree)에 대해서 정리하겠습니다.
가급적이면 쉽고 간단하게 설명할 예정이며, 더 깊고 많은 내용을
알고 싶으시다면 다른 블로그를 참고하시기 바랍니다 :)

 

 

 

트리(Tree)란?

 

 

 

트리(Tree)는 계층적인 자료를 표현하는 데 사용되는 자료구조입니다. 

가장 대표적인 예시로는 컴퓨터의 디렉토리 구조를 예시로 들 수 있습니다.

 

실제 나무를 거꾸로 놓은 것과 비슷한 형태를 가지고 있기 때문에 '트리(Tree)'라고 부릅니다.

 

트리 관련 용어

  • 루트 노드(root node): 부모가 없는 최상위 노드 (A)
  • 단말 노드(leaf node): 자식이 없는 노드 (H, I, E, J, G)
  • 크기(size): 트리에 포함된 모든 노드의 개수 
  • 깊이(depth): 루트 노드로부터의 거리 (A의 깊이는 0, A의 자식인 B와 C는 1, 그 아래 노드들은 2, ...)
  • 높이(height): 트리의 깊이 중 최댓값(즉, 가장 깊은 노드의 깊이)
  • 차수(degree): 각 노드가 가진 자식 노드의 개수(A는 B와 C로 나눠지므로 A의 차수는 2가 되며, E는 단말 노드이므로 차수는 0)



이진트리(Binary Tree)

 

 

 

 

 

트리의 각 노드는 여러 개의 자식을 가질 수 있지만, 이진 트리는 모든 노드가 최대 2개의 자식 노드(서브 트리)만 가지는 트리입니다.

 

또한, 이진 트리의 서브 트리도 모두 이진 트리입니다.

 

트리 순회

트리 순회란, 트리의 모든 노드를 특정한 순서로 한 번씩 방문하는 것을 의미합니다.

 

이를 통해서 트리의 구조를 파악하거나, 값을 읽어올 수 있습니다.

 

예시 트리에서 A -> B -> C 순으로 구성되어있다고 가정하면,

 

  • 전위 순회(Pre-order traversal): 노드 -> 왼쪽 자식 -> 오른쪽 자식 순서로 방문하는 순회 방법 A -> B -> C
  • 중위 순회(In-order traversal): 왼쪽 자식 ->노드 -> 오른쪽 자식 순서로 방문하는 순회 방법 B -> A -> C
  • 후위 순회(Post-order traversal): 왼쪽 자식 -> 오른쪽 자식 -> 노드 순서로 방문하는 순회 방법 B -> C -> A

 

 

이진 탐색 트리(Binary Search Tree, BST)

 

 

 

 

 

이진 탐색 트리는 위에서 설명한 이진 트리에 조건이 추가된 구조입니다.

 

예를 들어, 위 이미지에서 부모 노드인 10을 기준으로 보면,

왼쪽 자식 노드인 7은 더 작고, 오른쪽 자식 노드인 14는 더 큽니다.

 

또한, 7을 기준으로 봐도 

왼쪽 자식 노드는 1로 더 작고, 오른쪽 자식 노드는 9로 더 큽니다.

 

이처럼 이진 탐색 트리는 모든 노드가 '왼쪽 < 부모 < 오른쪽'의 규칙을 만족해야합니다.

 

또한, 같은 값을 가진 노드는 허용되지 않으며, 모든 노드의 값은 유일(unique)해야 합니다.

 

이진 탐색 트리 간단 정리

  • 부모 노드보다 왼쪽 자식의 값이 작다.
  • 부모 노드보다 오른쪽 자식의 값이 크다.
  • 중복된 값은 존재하지 않는다. (데이터 중복 X)



 

'❕Data structure' 카테고리의 다른 글

[Data Structure] 선형(Linear) & 비선형(NonLinear) 자료구조  (0) 2022.03.05
[자료구조] 연결 리스트(Linked List)는 무엇일까?  (0) 2021.09.20
[자료구조] 스택(Stack)과 큐(Queue)에 대해서 알아보자!  (0) 2021.08.02
'❕Data structure' 카테고리의 다른 글
  • [Data Structure] 선형(Linear) & 비선형(NonLinear) 자료구조
  • [자료구조] 연결 리스트(Linked List)는 무엇일까?
  • [자료구조] 스택(Stack)과 큐(Queue)에 대해서 알아보자!
MoriOS
MoriOS
기억하기 위해 기록하는 공간 🖋️
  • MoriOS
    MoriOS
    MoriOS
  • 전체
    오늘
    어제
    • 분류 전체보기 (42) N
      • 📌 Swift (10)
      • 📱 iOS (4)
      • 💡 Algorithm (1)
      • ❕Data structure (4)
      • 🪙 Python (0)
      • ⚙️ Git (2)
      • 🖋️ TIL Journal (18) N
      • 📝 Etc (3)
  • 블로그 메뉴

    • GitHub
  • 인기 글

  • 태그

    swift 대소문자
    ios
    Split
    random(in:)
    shuffled()
    후행클로저
    weak
    github 협업 방식
    github 기반 협업 방식
    swift optional
    swift 아스키
    Components
    ios 데이터 저장
    remote url
    클로저란?
    swift
    TiL
    github the requested url returned error: 403
    swift 중복 없는 랜덤 숫자
    강한 참조
    GitHub
    swift ismultiple
    joined()
    todo앱
    swift 알고리즘 팁
    the requested url returned error: 403!
    트레일링 클로저
    Optional
    todo 앱
    weak vs unowned
  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
MoriOS
[자료구조] 트리(Tree)란
상단으로

티스토리툴바