스닥
Playground
스닥
전체 방문자
오늘
어제
  • 분류 전체보기 (125)
    • 개발자 기본기 (1)
    • Swift 아키텍처 (6)
    • iOS 개발 (55)
      • Swift (12)
      • UIKit (17)
      • SwiftUI (9)
      • CoreData (9)
      • MusicKit (4)
      • WebKit (2)
      • 개발 환경 (0)
      • WatchOS (2)
    • 애플 개발자 아카데미 (4)
    • 막 쓰는 개발일지 (0)
    • 운영체제 (4)
    • 네트워크, 서버 (16)
      • Network (9)
      • Server (7)
    • 알고리즘 (8)
    • C언어 (7)
      • 함수 (7)
    • 하루 이야기 (23)

블로그 메뉴

  • GitHub계정
  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 트리
  • ios rendering
  • dfs
  • 자료구조
  • 도커
  • 깊이 우선
  • C 언어
  • ip주소
  • SWIFT
  • 알고리즘
  • docker
  • struct class 성능
  • 문자열 복사
  • 너비 우선
  • swift performance
  • BFS
  • 서버
  • core data
  • Core Animation
  • Server

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
스닥

Playground

[자료구조 ] Tree(트리) 필수 개념, 트리 순회
알고리즘

[자료구조 ] Tree(트리) 필수 개념, 트리 순회

2021. 5. 22. 17:31

트리란?

트리는 Node 로 이루어진 자료구조 이다.

하지만 Node로 이루어져있다고 다 트리라고 부를 수 있을까?

아니다. 트리는 그래프와 구별되며 다음과 같은 특징을 가지고 있다.

  1. 트리는 최소 연결 트리라고 불린다. 두 Node 사이에 반드시 1가지의 경로만을 가진다. (ex, A에서 F로 가는 경로는 한가지이다.)
  2. 트리는 오직 한개의 Root Node를 가진다.
  3. 트리에는 loop, circuit, self-loop가 존재하지 않는다. (사이클이 없는 방향 그래프(DAG))
  4. 트리의 순회는 Pre-Order, Inorder, Post-order로 이루어진다.
  5. Edge는 항상 Node의 개수 - 1 의 개수이다.

 


 

이진트리(Binary Tree)에 대해서

우리가 보통 BT 라고 부르는 Binary Tree(이진 트리)는 모든 Internal Node들이 2개 이하의 자식 (0 ~ 2개의 자식)을 가지는 트리를 이야기 한다.

완전 이진 트리 (Complete Binary Tree)란?

가장 마지막 Level을 제외한 모든 Node들이 2개의 자식을 가지는 BT

위 BT가 CBT가 되기 위해서는 G라는 노드가 F의 Siblings로 들어와야 한다.

 

 


 

이진 트리 순회 (Tree Traverse)

트리 순회는 예시의 순서를 눈으로 따라가면서 이해하는 것이 가장 빠르다.

트리를 순회할 때, 중요한 것은 node의 Level과 노드가 parent의 left에 위치해 있는지 right에 위치해 있는지이다.

 

 

1. 전위 순회 (Pre-Order Traversal)

: Root Node부터 시작

Parent Node → Left Child Node → Right Child Node

0 -> 1 -> 3 -> 7 -> 8 -> 4 -> 2 -> 5 -> 9 -> 10 -> 6

 

2. 중위 순회 (In-Order Traversal)

: 맨 왼쪽 Leaf Node 부터 시작

Left Child Node → Parent Node → Right Child Node

7 -> 3 -> 8 -> 1 -> 4 -> 0 -> 10 -> 9 -> 5 -> 2 -> 6

 

3. 후위 순회 (Post-Order Traversal)

: 맨 왼쪽 Leaf Node 부터 시작

Left Child Node → Right Child Node → Parent Node

7 -> 8 -> 3 -> 4 -> 1 -> 10 -> 9 -> 5 -> 6 -> 2 -> 0

 

4. 층별 순회 (Level-Order Traversal)

: Root Node 부터 시작

Hight → Low, Left → Right

0 -> 1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8 -> 9 -> 10

'알고리즘' 카테고리의 다른 글

[알고리즘] P, NP  (0) 2021.06.15
[알고리즘] MST 알고리즘 (1) - 그래프 분할 (cut property)  (0) 2021.06.14
[알고리즘] LSD vs MSD in Radix sort (기수 정렬) / C++ 구현  (0) 2021.06.12
[알고리즘] 계수 정렬 (key-indexed counting sort) / C++ 구현  (0) 2021.06.12
[알고리즘] DFS (Depth-First Search) / C++ 구현  (0) 2021.06.10
[알고리즘] BFS ( Breadth-First Search) / C++ 구현  (0) 2021.06.10
[알고리즘] Run-Length Encoding (런-렝스 부호화) 쉽게 이해하기  (0) 2021.05.19
    스닥
    스닥
    https://github.com/feldblume5263

    티스토리툴바