[자료구조] 트리(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
  • 전체
    오늘
    어제
    • 분류 전체보기 (56) N
      • 📌 Swift (10)
      • 📱 iOS (4)
      • 💡 Algorithm (1)
      • ❕Data structure (4)
      • 🪙 Python (0)
      • ⚙️ Git (2)
      • 🖋️ TIL Journal (32) N
      • 📝 Etc (3)
  • 블로그 메뉴

    • GitHub
  • 인기 글

  • 태그

    한 줄 주석
    속성 감시자
    코코아 프레임워크
    시뮬레이터 변경
    ios
    Components
    Split
    static
    시뮬레이터 추가
    네비게이션 주석
    SnapKit
    weak
    아이폰 시뮬레이터 추가
    후행클로저
    cocoa 프레임워크
    구문 레이블
    버튼 동작
    swift optional
    버튼 액션
    inset
    swift
    주석 활용
    코코아 프레임워크 이름
    addaction
    중첩 주석
    Optional
    TiL
    mark:
    문서화 주석
    GitHub
  • 최근 글

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

티스토리툴바