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

2023. 7. 19. 11:27·CS 지식/[자료구조]

이진 탐색 트리의 목적

이진 탐색 + 연결 리스트

  • 이진 탐색 : 탐색에 소요되는 시간복잡도는 O(logN), but 삽입, 삭제가 불가능
  • 연결리스트 : 삽입, 삭제의 시간복잡도는 O(1), but 탐색하는 시간복잡도가 O(N)

⇒ 이 두가지를 합하여 장점을 모두 얻는 것이 '이진탐색트리'

⇒ 즉, 효율적인 탐색 능력을 가지고, 자료의 삽입 삭제도 가능하게 하기

특징

  • 각 노드의 자식이 2개 이하
  • 각 노드의 왼쪽 자식은 부모보다 작고, 오른쪽 자식은 부모보다 큼
  • 중복된 노드가 없어야 함

중복이 없어야 하는 이유

  • 검색 목적 자료구조인데, 굳이 중복이 많은 경우에 트리를 사용하여 검색 속도를 느리게 할 필요가 없음
  • (트리에 삽입하는 것보다, 노드에 count 값을 가지게 하여 처리하는 것이 훨씬 효율적)

이진탐색트리의 순회는 '중위순회(inorder)' 방식 (왼쪽 - 루트 - 오른쪽)

중위 순회로 정렬된 순서를 읽을 수 있음

 

BST 핵심연산

  • 검색
  • 삽입
  • 삭제
  • 트리 생성
  • 트리 삭제

시간 복잡도

  • 균등 트리 : 노드 개수가 N개일 때 O(logN)
  • 편향 트리 : 노드 개수가 N개일 때 O(N)

삭제의 3가지 Case

  1. 자식이 없는 leaf 노드일 때 → 그냥 삭제
  2. 자식이 1개인 노드일 때 → 지워진 노드에 자식을 올리기
  3. 자식이 2개인 노드일 때 → 오른쪽 자식 노드에서 가장 작은 값 or 왼쪽 자식 노드에서 가장 큰 값 올리기

편향된 트리(정렬된 상태 값을 트리로 만들면 한쪽으로만 뻗음)는 시간복잡도가 O(N)이므로 트리를 사용할 이유가 사라짐

→ 이를 바로 잡도록 도와주는 개선된 트리가 AVL Tree, RedBlack Tree

저작자표시 비영리 변경금지 (새창열림)

'CS 지식 > [자료구조]' 카테고리의 다른 글

[자료구조] HashMap  (0) 2023.08.01
[자료구조] 해시(Hash)  (0) 2023.07.19
[자료구조] 트리(Tree)  (0) 2023.07.19
[자료구조] 힙(Heap)  (0) 2023.07.19
[자료구조] 스택 & 큐  (0) 2023.07.19
'CS 지식/[자료구조]' 카테고리의 다른 글
  • [자료구조] HashMap
  • [자료구조] 해시(Hash)
  • [자료구조] 트리(Tree)
  • [자료구조] 힙(Heap)
woojin._.
woojin._.
여러가지 개발을 해보며 발생하는 이야기들에 대한 블로그입니다:)
  • woojin._.
    Jin's Dev Story
    woojin._.
  • 전체
    오늘
    어제
    • 분류 전체보기 (829)
      • Tools (25)
        • eGovFrame (3)
        • GeoServer (3)
        • QGIS (2)
        • LabelImg (2)
        • Git (6)
        • GitHub (1)
        • Eclipse (7)
        • Visual Studio (1)
      • Web & Android (121)
        • SpringBoot (37)
        • Three.js (2)
        • Spring Data JPA (9)
        • 스프링 부트 쇼핑몰 프로젝트 with JPA (25)
        • Thymeleaf (4)
        • Spring Security (15)
        • Flutter (29)
      • Programming Language (61)
        • JAVA (27)
        • JavaScript (14)
        • Dart (2)
        • Python (15)
        • PHP (3)
      • Database (43)
        • PostgreSQL (32)
        • MYSQL (7)
        • Oracle (3)
        • MSSQL (1)
      • SERVER (17)
        • TCP_IP (3)
        • 리눅스 (7)
        • AWS (7)
      • Coding Test (445)
        • 백준[JAVA] (108)
        • 프로그래머스[JAVA] (260)
        • 알고리즘 고득점 Kit[JAVA] (3)
        • SQL 고득점 Kit[ORACLE] (74)
      • CS 지식 (49)
        • [자료구조] (14)
        • [네트워크] (12)
        • [데이터베이스] (10)
        • [알고리즘] (9)
        • [운영체제] (4)
      • 기타 (6)
      • 자격증 & 공부 (62)
        • 정보처리기사 (2)
        • SQLD (6)
        • 네트워크관리사 2급 (5)
        • 리눅스마스터 1급 (44)
        • 리눅스마스터 2급 (1)
        • ISTQB (3)
        • 시스템보안 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 인기 글

  • 태그

    backjoon
    pcce 기출문제
    Oracle
    리눅스마스터
    백준
    스프링부트
    스프링
    플러터
    리눅스마스터 1급
    baekjoon
    spring
    Spring Security
    리눅스
    DB
    python
    시큐리티
    CS
    Flutter
    데이터베이스
    postgresql
    데이터
    자바
    스프링 부트 쇼핑몰 프로젝트 with JPA
    programmers
    프로그래머스
    Linux
    Java
    CS지식
    JPA
    springboot
  • 최근 글

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

티스토리툴바