[자료구조] 이진탐색트리(Binary Search Tree)

2025. 5. 29. 01:22·자료구조

이진탐색트리(BST)란?

이진 트리의 한 종류로, 아래의 특징을 만족한다.

  1. 각 node는 뚜렷한 데이터 값을 갖는다.
  2. 더 작거나 또는 더 큰 값으로 key 값이 분류될 수 있다.
  3. 모든 node는 오른쪽 서브 트리보다 작고, 왼쪽 서브 트리보다 크다.

Binary Search Tree

 

 

node 탐색하기

node를 탐색하는 방법은 간단하다.

  1. 현재 node가 target이 아니라면, 크기 비교를 한다.
  2. 작다면 왼쪽 서브 트리로, 크다면 오른쪽 서브 트리로 이동한다.
  3. 만약 해당 노드가 leaf노드라면 false를 반환한다.
  4. 위 과정을 반복하면서 target을 찾는다.

 

node 추가하기

node를 추가하는 방법도 쉽다.

탐색하는 방법과 유사하게 tree를 내려가면서 해당 값이 들어갈 자리를 찾아서 추가해주면 된다.

 

예를 들어 16이라는 값을 추가한다고 하면

  1. 45 vs 16을 비교 -> left 서브 트리로 이동
  2. 9 vs 16을 비교 -> right 서브 트리로 이동
  3. 17 vs 16을 비교 -> left 서브 트리로 이동
  4. 더이상 내려갈 곳이 없으니 17의 왼쪽 node로 16을 추가

 

node 삭제하기

삭제하는 방법은 3가지 경우를 고려해서 삭제한다.

  1. 자식 없는 leaf node의 경우
  2. 자식이 1개인 경우
  3. 자식이 2개인 경우

1. 자식이 없는 leaf node인 경우

부모가 가리키던 값을 null값으로 바꿔서 삭제하기

leaf node인 13을 제거하는 경우

 

2. 자식이 1개인 경우

부모가 바로 그 자식과 연결되도록 바꾸기

자식이 있는 13을 제거하는 경우

3. 자식이 2개인 경우

오른쪽 서브 트리에서 가장 작은 값 또는 왼쪽 서브 트리에서 가장 큰 값을 골라 제거하고자 하는 대상의 자리로 복사

그 후 복사한 값이 원래 있던 자리의 node의 상태에 따라 1, 2의 방법으로 해당 자리의 node를 제거

root인 45를 제거하는 경우

 

728x90
반응형

'자료구조' 카테고리의 다른 글

[자료구조] Merge Sort, Heap Sort, Quick Sort  (1) 2025.06.06
[자료구조] Selection Sort(선택정렬), Insersion Sort(삽입정렬)  (0) 2025.06.05
[자료구조] B-Tree & Set ADT  (1) 2025.06.02
[자료구조] Heap & Priority Queue ADT  (1) 2025.05.29
[자료구조] Binary Tree(이진트리)  (0) 2025.05.27
'자료구조' 카테고리의 다른 글
  • [자료구조] Selection Sort(선택정렬), Insersion Sort(삽입정렬)
  • [자료구조] B-Tree & Set ADT
  • [자료구조] Heap & Priority Queue ADT
  • [자료구조] Binary Tree(이진트리)
CromArchive
CromArchive
배우고 정리하고 발전하는 블로그입니다
    반응형
  • CromArchive
    CromArchive
    CromArchive
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 자료구조
      • BIOS 프로젝트 (플러터)
      • C언어
      • C++
      • Python
      • 고등학교 활동
      • SSU::DoCode 프로젝트 1
      • IT 프로젝트 공모전(백엔드)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    다익스트라 알고리즘
    브루트포스 알고리즘
    최단경로
    c언어
    게임만들기
    ssucse
    자료구조
    재귀
    빠른거듭제곱
    SSU
    ssu_cse
    정수론
    songcheon_highschool
    분할정복
    주술회전
    ssu::docode
    C++
    백준
    selections sort
    로그라이크
  • 최근 댓글

  • 최근 글

  • 300x250
  • hELLO· Designed By정상우.v4.10.3
CromArchive
[자료구조] 이진탐색트리(Binary Search Tree)
상단으로

티스토리툴바