컴퓨터 개론 √ 원리를 알면 IT가 맛있다 쉽게 배우는 컴퓨터 기본 원리 한빛미디어 교재출판부.

Slides:



Advertisements
Similar presentations
1 08 배열. 한국대학교 객체지향연구소 2 C 로 배우는 프로그래밍 기초 2 nd Edition 배열  동일한 자료유형의 여러 변수를 일괄 선언  연속적인 항목들이 동일한 크기로 메모리에 저장되는 구조  동일한 자료 유형이 여러 개 필요한 경우에 이용할 수 있는.
Advertisements

1. 2 차원 배열  배열은 동일한 데이터 유형으로 여러 개의 변수를 사용할 경우 같은 이 름으로 지정하여 간편하게 사용할 수 있도록 하는 것으로서 앞에서 1 차원 배열을 공부하였습니다.  2 차원 배열은 바둑판을 생각하면 되며, 1 차원 배열에서 사용하는 첨자를 2.
출석수업 과제 – 총 5문제, 10월 25일 제출 정보통계학과 장영재 교수.
알고리즘 기본 개념 정렬 알고리즘 탐색 알고리즘 알고리즘 복잡도.
이진 나무 구조 강윤섭 2008년 5월 23일.
T-tree 엄종진 강원대학교 컴퓨터과학과.
제14장 동적 메모리.
연결리스트(linked list).
Chapter 05. 연결 자료 구조.
보고서 #7 (기한: 6/2) 2개의 스택, stk1, stk2를 이용하여 큐를 구현하라.
Windows Server 장. 사고를 대비한 데이터 백업.
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 12. 포인터의 이해.
제 3 장 선형 리스트 3.1 선형 리스트 3.2 연결 리스트 3.3 다항식.
쉽게 풀어쓴 C언어 Express 제17장 동적메모리와 연결리스트 C Express Slide 1 (of 13)
P150 문제를 프로그래밍 할 것 Source file (헤더파일포함), 실행화면 (학번_이름_1.txt)
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
Error Detection and Correction
제 11 장 다원 탐색 트리.
CHAPTER 5 트리(Tree).
자료구조: CHAP 7 트리(1) 순천향대학교 컴퓨터공학과 하 상 호.
자료구조: CHAP 4 리스트 (3) 순천향대학교 컴퓨터공학과 하 상 호.
프로그래밍 랩 – 7주 리스트.
2.3 제한 조건을 가진 자료구조 1. 스택(STACK) 1) 스택의 개념 - 삽입과 제거 작업이 리스트의 한쪽 끝에서만 수행
제 4 장 스택과 큐 4.1 스택(stack) 4.2 스택의 활용 4.3 큐 4.4 데큐.
11장. 1차원 배열.
CHAP 7: 트 리 (1) 한 성 대 학 교 정보통신공학과 봉 정 식.
Introduction To Data Structures Using C
자바 5.0 프로그래밍.
프로그래밍 개요
박성진 컴퓨터 프로그래밍 기초 [09] 배열 part 1 박성진
13. 포인터와 배열! 함께 이해하기 IT응용시스템공학과 김 형 진 교수.
자료구조: CHAP 7 트리 –review 순천향대학교 컴퓨터공학과 하 상 호.
Tree & Heap SANGJI University Kwangman Ko
Java의 정석 제 5 장 배 열 Java 정석 남궁성 강의 의
Quiz #7 다음 수들을 합병 정렬과 퀵 정렬 알고리즘을 이용하여 오름 차순으로 정렬하였을 때, 데이터 이동 회수를 각각 구하라. 여러분은 정렬 과정을 단계별로 보이면서 이동 회수를 추적해야 한다. 단, 퀵 정렬시에 피봇으로 배열의 왼쪽 첫 번째 원소를 선택한다. 5.
8장. 상호 배타적 집합의 처리.
쉽게 풀어쓴 C언어 Express 제14장 포인터 활용 C Express Slide 1 (of 22)
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
15장 컬렉션 프레임워크 Section 1 컬렉션 프레임워크의 개요 Section 2 리스트 Section 3 셋
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
5강. 배열 배열이란? 배열의 문법 변수와 같이 이해하는 배열의 메모리 구조의 이해 레퍼런스의 이해 다차원 배열
보고서 #7 (기한: 6/2) 2개의 스택, stk1, stk2를 이용하여 큐를 구현하라.
리스트(List)를 이용한 자료 관리 이점숙 /
객체기반 SW설계 팀활동지 4.
균형이진탐색트리 이진 탐색(binary search)과 이진 탐색 트리(binary search tree)와의 차이점
조 병 규 Software Quality Lab. 한 국 교 통 대 학 교
데이터 동적 할당 Collection class.
4장. 데이터 표현 방식의 이해. 4장. 데이터 표현 방식의 이해 4-1 컴퓨터의 데이터 표현 진법에 대한 이해 n 진수 표현 방식 : n개의 문자를 이용해서 데이터를 표현 그림 4-1.
Chapter 1 단위, 물리량, 벡터.
DA :: 퀵 정렬 Quick Sort 퀵 정렬은 비교방식의 정렬 중 가장 빠른 정렬방법이다.
AT MEGA 128 기초와 응용 I 기본적인 구조.
Chapter 1 단위, 물리량, 벡터.
Chapter 10 데이터 검색1.
세션에 대해 알아보고 HttpSession 에 대해 이해한다 세션 관리에 사용되는 요소들을 살펴본다
멀티미디어시스템 제 5 장. 멀티미디어 데이터베이스 개념 IT응용시스템공학과 김 형 진 교수.
11장 배열 1. 배열이란? 1.1 배열의 개요 1.2 배열의 선언과 사용.
Summary of Pointers and Arrays
Numerical Analysis Programming using NRs
트리 (Logical) Data Structures Linear list Tree Graph Linear structures
동적메모리와 연결 리스트 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
제 4 장 Record.
2014년 가을학기 손시운 지도 교수: 문양세 교수님 행렬과 배열 2014년 가을학기 손시운 지도 교수: 문양세 교수님.
어서와 C언어는 처음이지 제21장.
 6장. SQL 쿼리.
13. 포인터와 배열! 함께 이해하기.
C++ Espresso 제15장 STL 알고리즘.
7 생성자 함수.
타이머를 시작하려면 슬라이드 쇼 메뉴에서 쇼 보기를 클릭하십시오.
제 4 장. 리스트(List).
11. 트리.
Presentation transcript:

컴퓨터 개론 √ 원리를 알면 IT가 맛있다 쉽게 배우는 컴퓨터 기본 원리 한빛미디어 교재출판부

Chapter 7. 자료구조

학습목표 자료구조에 대해 살펴본다. 배열 구조에 대해 살펴본다. 연결 리스트 구조에 대해 살펴본다. 스택 구조에 대해 살펴본다. 큐 구조에 대해 살펴본다. 트리 구조에 대해 살펴본다.

프로그램에 의해 쉽게 이용되도록 구성된 데이터들간의 논리적 관계 대표적인 데이터 구조 Section 1: 자료구조의 개요 프로그램에 의해 쉽게 이용되도록 구성된 데이터들간의 논리적 관계 대표적인 데이터 구조 배열 연결 리스트 스택 큐 트리 적절한 데이터 구조 데이터의 추가, 삭제, 검색을 효율적으로 수행하고, 데이터 구조를 간결하게 표현할 수 있는 것

같은 데이터형의 요소들이 동일한 크기로 순서를 갖고 나열되어 있는 집합 Section 2: 배열 같은 데이터형의 요소들이 동일한 크기로 순서를 갖고 나열되어 있는 집합 크기가 n인 배열 arr (C 언어인 경우)  연결 리스트 배열이름과 첨자 배열은 첨자의 수에 따라 구분되는데, 첨자를 1개 사용하면 1차원 배열, 2개 사용하면 2차원 배열, 3개의 사용하면 3차원 배열이라 함

1차원 배열 배열의 크기 Section 2: 배열 첨자를 하나만 사용하는 배열로 같은 데이터 형의 변수가 일직선으로 이루어짐 1차원 배열 arr[i:n]의 크기 (i는 첫 번째 요소의 첨자고, n은 마지막 요소의 첨자) 1차원 배열 arr[1:10]의 크기는 10-1+1로 10이 된다.

1차원 배열 Section 2: 배열 arr[i]의 주소 1차원 배열 arr[n]에서 첫 번째 요소의 첨자가 a이고 시작 주소가 base, 요소의 크기가 size라 할 때 arr[i]의 주소 arr[5]의 주소 (arr[0]의 시작 주소는 200이고, 각 요소의 크기는 4바이트라고 가정) 시작 주소가 200이므로 base는 200이고, i는 5, 배열의 첨자가 0으로 시작되므로 a는 0, 요소의 크기인 size는 4

다차원 배열 Section 2: 배열 2차원 배열 이상의 배열 2차원 배열 첨자 두 개를 사용하는 배열로, 같은 데이터형의 변수가 행(row)과 열(column)을 나타내는데, 첫 번째 첨자는 행을, 두 번째 첨자는 열을 나타냄 2차원 배열 arr[i:n][j:m]의 크기 (i와 j는 첫 번째 요소의 행과 열의 첨자고, n과 m은 마지막 요소의 행과 열의 첨자) 2차원 배열 arr[1:3][1:2]의 크기는 i와 j가 1이고, n이 3, m이 2이므로 배열의 크기는 6이 됨

Section 2: 배열 2차원 배열 저장 방식은 행 중심 저장 방식과 열 중심 저장 방식

Section 2: 배열 2차원 배열 2차원 배열 arr[n][m]에서 arr[i][j]의 주소 (첫 번째 요소의 행과 열의 첨자가 a이고 시작 주소가 base, 요소의 크기가 size라 할 때) 2차원 배열 요소의 주소

Section 2: 배열 2차원 배열 a[2][0]의 주소 (배열은 a[3][2]이므로 n이 3, m이 2, 행과 열의 첨자는 0, 시작 주소는 200, 각 요소의 크기는 4) 행 중심 저장 방식의 a[2][0] 주소 열 중심 저장 방식의 a[2][0] 주소

선형 리스트 Section 3: 연결 리스트 어떤 순서에 의해 나열된 데이터가 여러 개인 구조 구현하는 방법 : 연속 리스트와 연결 리스트 연속 리스트의 예 데이터 6 삽입

선형 리스트 Section 3: 연결 리스트 연속 리스트의 예 데이터 5 삭제 연속 리스트의 삽입과 삭제 동작에는 데이터를 옮기는 시간이 필요

연결 리스트 Section 3: 연결 리스트 각 데이터들을 포인터로 연결하여 관리하는 구조 노드  각 노드는 데이터를 저장하는 데이터 영역과 다음 데이터가 저장된 노드를 가리키는 포인터 영역으로 구성 각 노드들은 주기억장치의 어느 위치에 저장되든 상관없고, 단지 각 노드들이 포인터에 의해 연결되어 있기만 하면 됨

Section 3: 연결 리스트 연결 리스트 연결 리스트의 예 데이터 영역에 두 개의 데이터가 있는 연결 리스트

연결 리스트 Section 3: 연결 리스트 단순 연결 리스트 각 노드에 하나의 포인터 영역을 갖고 있는 연결 리스트 데이터 삽입 데이터 1인 노드와 데이터 3인 노드 사이에 데이터 2를 삽입하는 과정 ① 데이터 2를 저장할 노드를 생성하고, 데이터 영역에 2를 저장한다.

Section 3: 연결 리스트 연결 리스트 ② 데이터 1인 노드의 포인터 영역이 가리키는 곳(데이터 3인 노드)을 새롭게 생성된 데이터 2인 노드의 포인터 영역이 가리키게 한다. 그러면 데이터 2인 노드가 데이터 3인 노드를 가리키게 된다.

단순 연결 리스트 Section 3: 연결 리스트 ③ 데이터 1인 노드의 포인터 영역이 새롭게 생성된 데이터 2인 노드를 가리키게 한다. 결국 데이터 2의 삽입 동작이 완료된다.

단순 연결 리스트 Section 3: 연결 리스트 데이터 삭제 데이터 3인 노드를 삭제하는 과정 ① 데이터 3인 노드의 포인터 영역이 가리키는 곳(데이터 5인 노드)을 바로 앞 노드(데이터 1인 노드)의 포인터 영역이 가리키게 함 ② 사용하지 않는 노드는 주기억장치에서 삭제

원형 연결 리스트 원형 연결 리스트의 예 Section 3: 연결 리스트 단순 연결 리스트는 임의의 노드에서부터 이전에 위치한 노드에 접근할 수 없고, 다시 헤드 포인터로부터 시작해야 하는 문제점 마지막 노드의 포인터 영역이 첫 번째 노드를 가리킨다. 원형 연결 리스트의 예

이중 연결 리스트 Section 3: 연결 리스트 단순 연결 리스트에서는 각 노드가 다음 노드를 가리키고 있으나 이전 노드를 가리키지 않아 이전 노드로 접근할 수가 없는 제한점 각 노드에 다음 노드를 가리키는 포인터 영역만이 아니라 이전 노드를 가리키는 포인터 영역이 있음 이중 연결 리스트의 노드 이중 연결 리스트의 예

이중 연결 리스트 Section 3: 연결 리스트 데이터 삽입 데이터 1인 노드와 데이터 3인 노드 사이에 데이터 2를 삽입 ① 데이터 2를 저장할 노드를 생성하고, 데이터 영역에 2를 저장

이중 연결 리스트 Section 3: 연결 리스트 ② 데이터 1인 노드의 다음 노드 포인터 영역이 가리키는 곳(데이터 3인 노드)을 새롭게 생성된 데이터 2인 노드의 다음 노드 포인터 영역이 가리키게 함

이중 연결 리스트 Section 3: 연결 리스트 ③ 새롭게 생성된 데이터 2인 노드의 이전 노드 포인터 영역이 데이터 1인 노드를 가리키게 함

이중 연결 리스트 Section 3: 연결 리스트 ④ 데이터 3인 노드의 이전 노드 포인터 영역이 새롭게 생성된 데이터 2인 노드를 가리키게 함

이중 연결 리스트 Section 3: 연결 리스트 ⑤ 데이터 1인 노드의 다음 노드 포인터 영역이 새롭게 생성된 데이터 2인 노드를 가리키게 함

이중 연결 리스트 Section 3: 연결 리스트 데이터 삭제 데이터 3인 노드를 삭제 ① 데이터 3인 노드의 다음 노드 포인터 영역이 가리키는 곳을 데이터 1인 노드의 다음 노드 포인터 영역이 가리키게 함

이중 연결 리스트 Section 3: 연결 리스트 ② 데이터 3인 노드의 이전 노드 포인터 영역이 가리키는 곳을 데이터 5인 노드의 이전 노드 포인터 영역이 가리키게 함

Section 3: 연결 리스트 이중 연결 리스트 ③ 데이터 3인 노드를 주기억장치에서 삭제

이중 원형 연결 리스트 Section 3: 연결 리스트 이중 연결 리스트의 첫 번째 노드의 이전 노드 포인터 영역이 마지막 노드를 가리키게 하고, 마지막 노드의 다음 노드 포인터 영역이 첫 번째 노드를 가리키도록 구성 이중 원형 연결 리스트의 예

데이터의 삽입과 삭제가 한쪽 방향에서만 일어나는 구조 Section 4: 스택 데이터의 삽입과 삭제가 한쪽 방향에서만 일어나는 구조 가장 나중에 삽입된 데이터가 가장 먼저 삭제되므로 후입 선출(LIFO : Last-In First-Out)이라고도 함

배열로 구현한 스택 Section 4: 스택 top은 데이터 삽입과 삭제가 이루어지는 배열의 첨자. 초기 상태의 top은 0 스택에 데이터 10을 삽입

배열로 구현한 스택 Section 4: 스택 데이터 삽입 4개의 데이터를 추가로 삽입하면 다음과 같이 스택이 가득 차게 되고, top은 5가 됨 : 더 이상 데이터를 삽입할 수 없음

배열로 구현한 스택 Section 4: 스택 데이터 삭제 데이터 삭제는 top을 1 감소시키기만 하면 됨 사실 stack[1]에 저장된 20은 지워지지는 않았지만, 이 상태에서 새로운 데이터를 삽입하면 stack[1]에 저장되어 20이 지워지게 된다.

배열로 구현한 스택 Section 4: 스택 데이터 삭제 또 다시 데이터를 삭제하면 다음과 같이 top이 0이 됨 : 더 이상 데이터를 삭제할 수 없음

Section 4: 스택 연결 리스트로 구현한 스택 top은 첫 번째 노드를 가리킴

데이터 삽입 Section 4: 스택 데이터 30을 삽입 ① 데이터 30을 저장할 노드를 생성하고, 데이터 30을 데이터 영역에 저장

Section 4: 스택 데이터 삽입 ② 새롭게 생성된 데이터 30인 노드의 포인터 영역이 top이 가리키는 곳(데이터 20인 노드)을 가리키게 함

Section 4: 스택 데이터 삽입 ③ top이 새롭게 생성된 데이터 30인 노드를 가리키게 함

연결 리스트로 구현한 스택 Section 4: 스택 데이터 삭제 ① top이 가리키는 노드의 포인터 영역이 가리키는 곳을 top이 가리키게 함

Section 4: 스택 연결 리스트로 구현한 스택 데이터 삭제 ② 데이터 20인 노드를 주기억장치에서 삭제

Section 5: 큐 한쪽 방향으로 데이터가 삽입되고 반대 방향으로 데이터가 삭제되는 구조 가장 먼저 삽입된 데이터가 가장 먼저 삭제되므로 선입 선출(FIFO : First-In First-Out)이라고도 함

Section 5: 큐 배열로 구현한 큐 front는 첫 번째 데이터가 저장된 배열의 첨자고, rear는 새로운 데이터가 삽입될 배열의 첨자 (초기 상태이므로 front와 rear는 0)

Section 5: 큐 데이터 삽입 데이터 10을 삽입

배열로 구현한 큐 Section 5: 큐 데이터 삽입 계속해서 4개의 데이터를 삽입하면 다음과 같이 큐가 가득 차게 되고, rear는 5 : 더 이상 데이터를 삽입할 수 없음

배열로 구현한 큐 Section 5: 큐 데이터 삭제 데이터 삭제 전 front를 1 증가 : front를 1 증가시켜 front는 1이 된다

배열로 구현한 큐 Section 5: 큐 데이터 삭제 또 다시 데이터를 삭제하면 다음과 같이 큐가 비게 됨 : 더 이상 데이터를 삭제할 수 없음

Section 5: 큐 원형 큐 큐의 앞부분이 비어있음에도 rear가 큐의 크기와 같아 데이터를 삽입할 수 없는 문제점

원형 큐 Section 5: 큐 문제점을 해결하는 가장 바람직한 방법 중 하나가 원형 큐 처음과 끝을 연결한 구조로, 마지막 공간이 다음 큐의 시작점이 된다.

Section 5: 큐 연결 리스트로 구현한 큐 front는 가장 먼저 삽입된 노드를 가리킴

연결 리스트로 구현한 큐 Section 5: 큐 데이터 삽입 ① 데이터 30을 저장할 노드를 생성하고, 데이터 30을 데이터 영역에 저장하고, 포인터 영역에 NULL을 저장

연결 리스트로 구현한 큐 Section 5: 큐 데이터 삽입 ② 연결 리스트의 마지막 노드(데이터 20인 노드)의 포인터 영역이 새롭게 생성된 데이터 30인 노드를 가리키게 함

연결 리스트로 구현한 큐 Section 5: 큐 데이터 삭제 ① front가 가리키는 노드의 포인터 영역이 가리키는 곳을 front가 가리키게 함 ② 데이터 10인 노드를 주기억장치에서 삭제

Section 6: 트리 트리(tree) 구조 나무를 뒤집은 모습으로 계층 구조를 표현하기에 적합 대학의 조직도

트리 구조로 나타낸 대학의 조직도 Section 6: 트리 원을 ‘노드(node)’ 노드와 노드를 연결하는 선을 ‘링크(link)’ 가장 위에 위치한 노드를 ‘루트 노드(root node)’ 윤리교육과, 국어교육과 노드와 같이 마지막에 위치한 노드를 ‘단말 노드(terminal node)’ 또는 ‘리프 노드(leaf node)’

Section 6: 트리 트리 구조로 나타낸 대학의 조직도

트리 구조로 나타낸 대학의 조직도 Section 6: 트리 트리에서 임의의 노드를 선택하면 이 노드와 이 노드 아래에 있는 노드들은 다시 트리 구조가 된다. 이런 구조를 ‘서브 트리(subtree)’라 함 임의의 노드의 조상과 자손을 지칭할 수 있는데, 임의의 노드 바로 위에 있는 노드를 ‘부모 노드(parent node)’라 하고, 바로 아래에 있는 노드를 ‘자식 노드(children node)’라 함 노드 B의 부모 노드는 노드 A고, 노드 B의 자식 노드는 노드 E, 노드 F 그리고 노드 G다. 그리고 같은 부모 노드를 가지는 노드들을 ‘형제 노드(sibling node)’라 함 루트 노드에서 임의의 노드까지 방문한 노드의 수를 ‘레벨(level)’이라 함 트리의 최대 레벨을 ‘깊이(depth)’라 함

이진 트리 Section 6: 트리 모든 노드들의 자식 노드가 두 개 이하인 트리 서브 트리가 두 개 이하기 때문에 서브 트리는 왼쪽 서브 트리와 오른쪽 서브 트리로 구분

Section 6: 트리 이진 트리 완전 이진 트리(complete binary tree) : 단말 노드를 제외한 나머지 노드가 두 개의 자식 노드를 가지고 있는 트리

Section 6: 트리 이진 트리 포화 이진 트리(full binary tree) : 모든 노드가 채워진 이진 트리

이진 트리의 표현 Section 6: 트리 배열이나 연결 리스트를 이용해서 구현할 수 있음 연결 리스트로 구현한 이진 트리의 각 노드

Section 6: 트리 이진 트리의 표현

이진 트리의 순회 Section 6: 트리 이진 트리의 모든 노드를 특정한 순서대로 한 번씩 방문하는 것 순회하는 방법 전위(preorder) 순회 중위(inorder) 순회 후위(postorder) 순회

Section 6: 트리 전위 순회 동작 과정 ① 순회는 루트 노드부터 시작하므로 루트 노드 A를 가장 먼저 방문

Section 6: 트리 전위 순회 ② 루트 노드 A의 왼쪽 서브 트리를 방문해야 한다. 그러므로 A 노드의 왼쪽 서브 트리에서 노드인 B를 방문

전위 순회 Section 6: 트리 ③ 노드 B의 왼쪽 서브 트리를 방문해야 한다. 그러므로 노드 B의 왼쪽 서브 트리에서 D 노드를 방문

전위 순회 Section 6: 트리 ④ 노드 B의 왼쪽 서브 트리에 대한 방문이 끝났으므로 노드 B의 오른쪽 서브 트리를 방문한다. 그러므로 노드 B의 오른쪽 서브 트리의 노드인 E 방문

Section 6: 트리 전위 순회 ⑤ 노드 E의 왼쪽 서브 트리에서 노드인 F를 방문

Section 6: 트리 전위 순회 ⑥ 루트 노드 A의 왼쪽 서브 트리에 대한 모든 방문이 끝났으므로 노드 A의 오른쪽 서브 트리를 방문해야 한다. 그러므로 노드 A의 오른쪽 서브 트리 에서 노드인 C를 방문. 모든 노드의 방문이 완료된다.

Section 6: 트리 중위 순회 동작 과정 ① 루트 노드의 왼쪽 서브 트리를 방문

Section 6: 트리 중위 순회 ② 노드 B의 왼쪽 서브 트리를 방문한다. 그러므로 노드 B의 왼쪽 서브 트리의 노드 D를 방문

Section 6: 트리 중위 순회 ③ 노드 B의 왼쪽 서브 트리에 대한 방문이 끝났으므로 루트 노드인 B 방문

Section 6: 트리 중위 순회 ④ 노드 B의 오른쪽 서브 트리를 방문. 노드 B의 오른쪽 서브 트리의 루트 노드는 E

Section 6: 트리 중위 순회 ⑤ 노드 E의 왼쪽 서브 트리를 방문해야 하므로 노드 F를 방문

Section 6: 트리 중위 순회 ⑥  노드 E의 왼쪽 서브 트리에 대한 방문이 끝났으므로 루트 노드인 E를 방문

Section 6: 트리 중위 순회 ⑦ 노드 A의 왼쪽 서브 트리에 대한 방문이 모두 끝났으므로 노드 A를 방문

Section 6: 트리 중위 순회 ⑧ 노드 A의 오른쪽 서브 트리를 방문한다. 그러므로 노드 C를 방문. 모든 노드의 방문이 완료

Section 6: 트리 후위 순회 동작 과정 ① 노드 A의 왼쪽 서브 트리를 방문

Section 6: 트리 후위 순회 ② 노드 B의 왼쪽 서브 트리를 방문한다. 그러므로 노드 B의 왼쪽 서브 트리의 노드 D를 방문

Section 6: 트리 후위 순회 ③ 노드 B의 왼쪽 서브 트리에 대한 방문이 끝났으므로 노드 B의 오른쪽 서브 트리를 방문. 노드 B의 오른쪽 서브 트리의 루트 노드는 E

Section 6: 트리 후위 순회 ④ 노드 E의 왼쪽 서브 트리를 방문해야 하므로 노드 F를 방문

Section 6: 트리 후위 순회 ⑤ 노드 E의 왼쪽 서브 트리에 대한 방문이 끝났으므로 오른쪽 서브 트리를 방문해야 하는데 없으므로 노드 E를 방문

Section 6: 트리 후위 순회 ⑥ 노드 B 의 왼쪽 서브 트리와 오른쪽 서브 트리에 대한 방문이 끝났으므로 노드 B를 방문

Section 6: 트리 후위 순회 ⑦ 노드 A의 왼쪽 서브 트리에 대한 방문이 끝났으므로 오른쪽 서브 트리 방문. 그러므로 노드 C를 방문

Section 6: 트리 후위 순회 ⑧ 노드 A의 왼쪽 서브 트리와 오른쪽 서브 트리에 대한 방문이 끝났으므로 노드 A를 방문. 모든 노드의 방문이 완료

이진 탐색 트리 Section 6: 트리 데이터의 삽입, 삭제, 검색 등이 자주 발생하는 경우에 효율적인 구조 같은 데이터를 갖는 노드는 없어야 하며, 왼쪽 서브 트리에 있는 모든 데이터는 현재 노드의 데이터보다 작고, 오른쪽 서브 트리에 있는 모든 노드의 데이터는 현재 노드의 데이터보다 크다.

이진 탐색 트리 Section 6: 트리 데이터 삽입 데이터가 9인 노드를 삽입 ① 삽입할 위치를 루트 노드부터 찾아가는데, 삽입할 노드의 데이터가 비교하는 노드의 데이터보다 작으면 왼쪽 서브 트리로 진행하고, 크면 오른쪽 서브 트리로 진행

Section 6: 트리 이진 탐색 트리 ② 단말 노드의 데이터 8보다 삽입할 노드의 데이터 9가 크므로 단말 노드의 오른쪽 자식 노드로 삽입. 만약 삽입할 노드의 데이터가 작으면 왼쪽 자식 노드로 삽입

Section 6: 트리 이진 탐색 트리 데이터 삭제 삭제할 노드가 단말 노드인 경우 삭제될 노드를 가리키는 링크를 제거

이진 탐색 트리 Section 6: 트리 삭제할 노드의 오른쪽 자식 노드가 없는 경우 삭제되는 노드의 부모 노드가 삭제되는 노드의 왼쪽 자식 노드를 가리키게 함

Section 6: 트리 이진 탐색 트리 삭제할 노드의 오른쪽 자식 노드는 있으나 오른쪽 자식 노드의 왼쪽 자식 노드가 없는 경우 부모 노드(A)가 삭제될 노드(B)의 오른쪽 자식 노드(C)를 가리키게 하고, 삭제될 노드의 왼쪽 자식 노드(D)를 삭제될 노드의 오른쪽 자식 노드(C)의 왼쪽 자식 노드로 둠

이진 탐색 트리 Section 6: 트리 그 외의 경우 오른쪽 자식 노드도 있고, 오른쪽 자식 노드의 왼쪽 자식 노드도 있는 경우 로, 이런 노드를 삭제할 때는 삭제될 노드(A)의 오른쪽 서브 트리에서 가장 작은 키를 갖는 노드(B)를 삭제할 노드의 위치로 옮기고 옮길 노드(B)의 오 른쪽 자식 노드(C)가 있으면 이 노드(C)를 옮길 노드(B)의 부모 노드(D)의 왼쪽 자식 노드로 둠

이진 탐색 트리 Section 6: 트리 그 외의 경우 옮길 노드의 오른쪽 자식 노드가 있는 경우로, 데이터 3인 노드를 삭제하려 면 오른쪽 서브 트리에서 가장 작은 키를 가진 데이터 4인 노드가 데이터 3 인 노드의 위치로 옮기고, 데이터 4인 노드의 오른쪽 자식 노드(데이터 5인 노드)가 있으므로 이를 데이터 4인 노드의 부모 노드인 데이터 6인 노드의 왼쪽 자식 노드로 둠

Thank you