제 8 장 이진 탐색 트 리 8.1 이진 탐색 트리 정의 8.2 이진 탐색 트리의 탐색 8.3 이진 탐색 트리의 삽입

Slides:



Advertisements
Similar presentations
멘토링 2 주차 장 프로그래밍을 위한 자바의 자료형  값이 변하지 않는 상수  메모리 기억공간인 변수.
Advertisements

언어의 자서전 소단원 (1) 단원. 언어의 특성 기호성 자의성 사회성 규칙성 창조성 역사성.
C 언어 컴퓨터학과 C 언어 ( STS ) (Chap5. Selection-Making Decisions ) C 언어.
스택 스택 추상자료형 스택 스택의 구현 스택의 응용 한빛미디어(주).
제6장 조건문.
Chapter 02. C언어 기반의 C++ 박 종 혁 교수 UCS Lab SeoulTech Tel:
제 1장 자바스크립트란 ?.
컴퓨터 응용 및 실습 Part1. OOP&Java Programming data type Review
8. 파일 인덱스: 탐색트리 (Search Tree)
데이터 관리의 모든 것 데이터 최적화하기 데이터 정렬하기 자동 필터와 고급 필터
시스템 생명 주기(System Life Cycle)(1/2)
Horowitz, Sahni and Anderson-Freed Computer Science Press
명품 JAVA Essential.
제5장 트리.
시스템 생명 주기(System Life Cycle)(1/2)
강의 #7 트리(Tree).
7 스택.
제2절 법인세의 계산구조와 세무조정 1. 각 사업연도소득에 대한 법인세 계산구조 회계와 사회 결산서상 당기순이익
Choi, Namseok Java 기초 (Java의 제어문과 배열) Choi, Namseok
제 4 장 L i s t.
스택(stack) SANGJI University Kwangman Ko
자료구조: CHAP 7(3) 트리 순천향대학교 컴퓨터공학과 하 상 호.
자료구조: CHAP 7 이진 탐색 트리 순천향대학교 컴퓨터공학과 하 상 호.
C언어 응용 제 10 주 트리.
CHAP 11: 해싱 순천향대학교 하상호.
아두이노 프로그래밍 2일차 – Part4 아날로그 키패드 활용하기 강사: 김영준 목원대학교 겸임교수.
주소록 프로그램.
프로그래밍2 및 실습 C언어 기반의 C++ 2.
제 4주 2014년 1학기 강원대학교 컴퓨터학부 담당교수: 정충교
IT CookBook, 자바로 배우는 쉬운 자료구조
4장 제어문 선택문: if 문, if – else 문, switch 문
CHAP 7:트리 C로 쉽게 풀어쓴 자료구조 생능출판사 2005.
AVLTree vs 편향 Tree.
CHAP 7:트리 C로 쉽게 풀어쓴 자료구조 생능출판사 2005.
컴퓨터의 기초 제 2강 - 변수와 자료형 , 연산자 2006년 3월 27일.
제 2장 어휘구조와 자료형 토 큰 리 터 럴 주 석 자 료 형 배 열 형.
제 12장. 사용자 정의형으로서의 클래스 학기 프로그래밍언어및실습 (C++).
윈도우 계산기 윈도우 보조프로그램 4칙연산 외 10여가지 기능 구현 ⑥ 메뉴 ⑤ 메모리 ③ 단항연산 ④ 지우기
제어문 & 반복문 C스터디 2주차.
4장 - PHP의 표현식과 흐름 제어-.
3장. 변수와 연산자. 3장. 변수와 연산자 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, / 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, /
Java의 정석 제 4 장 조건문과 반복문 Java 정석 남궁성 강의
[INA470] Java Programming Youn-Hee Han
U N I X 창원대학교 전자계산학과 김병찬.
작성일 참고서적 – Programing Game AI by Example
CHAP 12:탐색 C로 쉽게 풀어쓴 자료구조 생능출판사 2005.
CHAP 12 : 탐색.
CHAP 12 : 탐색 C로 쉽게 풀어쓴 자료구조 생능출판사 2011.
자바 5.0 프로그래밍.
쉽게 풀어쓴 C언어 Express 제6장 조건문 C Express Slide 1 (of 28)
조별 주제 발표 -기프트리(gifTree)-
Chapter 9. Multilevel Indexing and B-Trees
제9장 인재관리 제3부 교육훈련 및 개발.
강의 #11 탐색(Search).
Chapter 08 조건문.
탐색 선형 탐색, 이진 탐색, 이진 탐색 트리.
세부 상세 페이지 & 기획전 인스타그램 비슷한 레이아웃으로 이하 폼리스 TL600 상세페이지 100,000원 [56%]
제 5 장 탐색트리.
Chapter 07 트리.
(Ⅰ) 독서와 언어의 본질 언어의 본질 1 2 [고등 국어] – 독서와 문법 독서의 본질 (1) 독서의 특성
8단계 3층을 완성한다 Case 1 Case 2 Case 3 Case 4
DataScience Lab. 박사과정 김희찬 (화)
어서와 C언어는 처음이지 제23장.
어서와 C언어는 처음이지 제22장.
윤성우의 열혈 C++ 프로그래밍 윤성우 저 열혈강의 C++ 프로그래밍 개정판 Chapter 02. C언어 기반의 C++ 2.
Choi Younghwan CSE HUFS
2017년 생활안전구조차 규격서 (그랜드스타렉스 3밴) 생활안전.
배열, 포인터, 함수 Review & 과제 1, 2.
PHP 기초문법 PHP를 공부하는데 있어 가장 기초가 되는 PHP기초문법에 대해서 배워 봅니다.
Report #3- 문제 1 Set(집합) 추상 데이터 타입을 정의하고, 다음과 같은 연산자들을 포함시켜라. 여기서 S, S1, S2는 집합을 나타내고, i는 집합 원소를 나타낸다. 연산 의미 create() Return {} insert(S, i) If i є S then.
Presentation transcript:

제 8 장 이진 탐색 트 리 8.1 이진 탐색 트리 정의 8.2 이진 탐색 트리의 탐색 8.3 이진 탐색 트리의 삽입 8.4 이진 탐색 트리의 삭제 8.5 높이 균형 이진 트리(AVL)

1. 정의 (1) 정의 * 아래의 성질을 만족하는 이진 트리로 삽입과 삭제가 비교적 효 율적인 자료구조 (2) 성질 ① 이진 탐색 트리 T의 왼쪽 서브 트리의 모든 노드들은 트리 T의 루트 노드의 키 값(kr)보다 작은 키 값을 갖는다.(kr > kls) ② 이진 탐색 트리 T의 오른쪽 서브 트리의 모든 노드들은 트리 T의 루트 노드의 키 값(kr)보다 큰 키 값을 갖는다.(kr < krs) ③ 이진 탐색 트리 T의 오른쪽 서브 트리와 왼쪽 서브 트리도 이진 탐색트리이다.

10개의 레코드 키 값 {25, 15, 9, 1, 18, 31, 11, 27, 33, 29}로 이진 탐색트리 구성 과정 ① 첫 번째 키 값 25를 루트, 두 번째 키 값 15는 루트보다 작으므로 왼쪽, 세 번째 키 값 9는 15보다 작으므로 15의 왼쪽에 위치 25 15 9 ② 키 값 1은 루트보다 작고 9보다 작으므로 왼쪽 노드에 삽입하고, 키 값 18은 루트보다 작고 15보다 크므로 오른쪽 노드에 삽입 25 15 9 18 1

④ 키 값 27는 루트보다 크므로 오른쪽 자식노드로 삽입, 자식노드 31보다 작으므로 왼쪽에 삽입 ③ 키 값 31는 루트보다 크므로 오른쪽 자식노드로 삽입, 11은 루트보다 작고, 15보다 작으므로 왼쪽 노드에 삽입하나, 키 값 9보다 크므로 오른쪽 노드에 삽입 25 15 31 9 18 1 11 ④ 키 값 27는 루트보다 크므로 오른쪽 자식노드로 삽입, 자식노드 31보다 작으므로 왼쪽에 삽입 25 15 31 9 18 27 1 11

⑤ 키 값 33는 루트보다 크므로 오른쪽 자식노드로 삽입, 자식노드 31보다 크므로 오른쪽에 삽입 25 15 31 9 18 27 33 1 11 ⑥ 키 값 29는 루트보다 크므로 오른쪽 자식노드로 삽입, 자식노드 31보다 작으므로 왼쪽에 삽입하나, 노드 27보다 크므로 오른쪽 자식으로 삽입 25 15 31 9 18 27 33 1 11 29

2. 이진 탐색 트리의 탐색 (1) 탐색방법 ① 현재 서브 트리의 루트 노드의 키 값을 비교한다. ② 루트 노드의 키 값과 검색하고자 하는 키 값이 같으면 루트 노드의 키 값을 반환한다. ③ 루트 노드의 키 값보다 검색 키 값이 작으면 왼쪽 서브 트리를 탐색한다. ④ 루트 노드의 키 값보다 검색 키 값이 크면 오른쪽 서브 트리를 탐색한다.

(2) 알고리즘 bstree_node *binary_search_tree(tree, key) bstree_node *tree; char key; { bstree_node *ptr; boolean found; ptr = tree; found = FALSE; while((ptr ! = NULL) && (!found)) { result = compare(key, ptr→data) switch(result) { case '<' : ptr = ptr→lchild; break; case '=' : found = TRUE; break; case '>' : ptr = ptr→rchild; break; } return ptr;

3. 이진 탐색 트리의 삽입 (1) 삽입과정 이진 탐색 트리의 삽입은 항상 단말 노드에서 일어난다. ① 트리 T가 비어 있는 트리라 하면, 삽입노드는 트리 T의 루트 노드가 된다. ② 트리 T가 비어 있지 않은 트리라 하면, 루트 노드의 키 값(ki)과 삽입노드의 키 값을 비교한다. · 만일 ki > k이면, 노드의 왼쪽 서브트리에서 적당한 위치를 탐색하여 키 k를 삽입한다. · 만일 ki < k이면, 노드의 오른쪽 서브트리에서 적당한 위치를 탐색하여 키 k를 삽입한다.

(2) 알고리즘 bstree_node *bst_insert(x, ptr) bstree_node *ptr; char x; { if(ptr == NULL){ ptr = getNode(); ptr→data = x; ptr→lchild = NULL; ptr→rchild = NULL; } else if(x < ptr→data) bst_insert(x, ptr→lchild); else bst_insert(x, ptr→rchild);

T T 23 23 18 44 18 44 35 12 20 35 12 20 52 52 19 (a) 19의 삽입 전 (b) 19의 삽입 후 T T 23 23 44 18 44 18 12 20 35 52 12 20 35 52 19 19 38 (c) 38의 삽입 전 (d) 38의 삽입 후

4. 이진 탐색 트리의 삭제 (1) 정의 트리의 임의의 위치에서 수행된다. 노드의 삭제는 삭제되는 노드의 부모 노드 위치를 찾아 링크를 수정하여 이진 탐색 트리의 성질을 만족하도록 한다. (2) 삭제과정 ① 단말 노드의 삭제 T T 23 23 삭제노드 18 44 18 44 12 20 35 52 12 20 52 삭제 후 트리

② 하나의 자식 노드를 갖는 노드의 삭제 ③ 두 개의 자식 노드를 갖는 노드의 삭제 삭제 후 트리 삭제 후 트리 삭제하고자 하는 노드의 부모 노드로 하여금 삭제될 노드의 자식 노드를 카리키도록 함으로서 삭제 수행 T T 삭제노드 23 23 18 44 12 44 삭제 후 트리 12 35 52 35 52 ③ 두 개의 자식 노드를 갖는 노드의 삭제 삭제 후에도 탐색 이진 트리의 성질을 만족해야 한다. 왼쪽 서브트리의 가장 큰 원소 또는 오른쪽 서브트리의 가장 작은 원소를 삭제 노드 위치에 대체 삽입 후 노드 삭제 T T 삭제노드 23 23 18 44 19 44 삭제 후 트리 12 21 35 52 12 21 35 52 ① 대체 19 22 20 22 ② 21의 왼쪽 자식노드 20

(2) 이진 탐색 트리가 좋은 탐색 효율을 보이기 위해서는 루트 노드를 중심으로 오른쪽 서브트리와 왼쪽 서브트리가 대칭을 이루고, 레벨이 거의 같은 경우가 되어야 한다. 5. 높이 균형 이진 트리(AVL : Adelson-Velskii & Landis) (1) 정의 서브 트리들의 높이에서 균형을 이루는 이진 트리이며, 삽입과 삭제 연산이 수행된 후에 트리의 높이는 균형을 이루게 된다. ① 공백 트리는 높이가 균형을 이룬다. ② T를 이진 트리라하고, Tl과 Tr를 각각 왼쪽 서브트리와 오른쪽 서브트리로 갖는다면 T는 다음 조건을 만족한다. · Tl와 Tr의 높이가 균형을 이룬다. · hl과 hr을 각각 서브 트리 Tl, Tr의 높이라 하면, | hl - hr | ≤ 1

h i k l n j m d f g e a B c (a) 높이 균형 트리(AVL트리) h i k l j n m o (b) 높이 불균형 트리