Microsoft PowerPoint - ch10 - 이진트리, AVL 트리, 트리 응용 pm0600

Similar documents
Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100

chap 5: Trees

11장 포인터

Lab 3. 실습문제 (Single linked list)_해답.hwp

chap 5: Trees

7장

이번장에서학습할내용 동적메모리란? malloc() 와 calloc() 연결리스트 파일을이용하면보다많은데이터를유용하고지속적으로사용및관리할수있습니다. 2

Lab 4. 실습문제 (Circular singly linked list)_해답.hwp

슬라이드 1


A Hierarchical Approach to Interactive Motion Editing for Human-like Figures

untitled

Microsoft PowerPoint - ch07 - 포인터 pm0415

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CC0E7B0EDB0FCB8AE5C53746F636B5F4D616E D656E74732E637070>

chap8.PDF

Microsoft PowerPoint - chap11-포인터의활용.pptx

Microsoft PowerPoint - Chapter_09.pptx

정의 이진탐색트리 이진탐색트리 (BST: binary search tree) 는각각의노드가 BST 특성을만족하는키 - 주소쌍을가지고있는이진트리 BST 특성 트리에있는각각의키에대해, 왼쪽서브트리에있는모든키는이것보다작고, 오른쪽서브트리에있는모든키는이것보다큼 < > 2

PowerPoint 프레젠테이션

08장.트리

Microsoft PowerPoint - Chap5 [호환 모드]

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

C++-¿Ïº®Çؼ³10Àå

Chapter 4. LISTS

<4D F736F F F696E74202D20C1A63132B0AD20B5BFC0FB20B8DEB8F0B8AEC7D2B4E7>

컴파일러

Microsoft PowerPoint - 자료구조2008Chap06

(Microsoft Word - \301\337\260\243\260\355\273\347.docx)

11장 포인터

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

제 1 장 기본 개념

Chapter 4. LISTS

<4D F736F F F696E74202D20C1A63137C0E520B5BFC0FBB8DEB8F0B8AEBFCD20BFACB0E1B8AEBDBAC6AE>

슬라이드 1

슬라이드 1

untitled

PowerPoint 프레젠테이션

03장.스택.key

06장.리스트

Microsoft PowerPoint - 제11장 포인터(강의)

adfasdfasfdasfasfadf

K&R2 Reference Manual 번역본

제 11 장포인터 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다.

슬라이드 1

중간고사

Frama-C/JESSIS 사용법 소개

Microsoft PowerPoint - 제11장 포인터

슬라이드 1

Lab 5. 실습문제 (Double linked list)-1_해답.hwp

chap01_time_complexity.key

슬라이드 1

05_tree

Microsoft PowerPoint - chap-11.pptx

슬라이드 제목 없음

설계란 무엇인가?

본 강의에 들어가기 전

Microsoft PowerPoint - chap10-함수의활용.pptx

Microsoft PowerPoint - chap06-2pointer.ppt

Microsoft PowerPoint - 알고리즘_5주차_1차시.pptx

Chap 6: Graphs

1장. 유닉스 시스템 프로그래밍 개요


untitled

A Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning

3. 1 포인터란 3. 2 포인터변수의선언과사용 3. 3 다차원포인터변수의선언과사용 3. 4 주소의가감산 3. 5 함수포인터

Microsoft PowerPoint - lec07_tree [호환 모드]

5.스택(강의자료).key

Line (A) å j a k= i k #define max(a, b) (((a) >= (b))? (a) : (b)) long MaxSubseqSum0(int A[], unsigned Left, unsigned Right) { int Center, i; long Max

03_queue

Microsoft PowerPoint - chap10_tree

PowerPoint 프레젠테이션

Microsoft PowerPoint - chap03-변수와데이터형.pptx

구조체정의 자료형 (data types) 기본자료형 (primitive data types) : char, int, float 등과같이 C 언어에서제공하는자료형. 사용자정의자료형 (user-defined data types) : 다양한자료형을묶어서목적에따라새로운자료형을

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt

원형연결리스트에대한설명중틀린것은 모든노드들이연결되어있다 마지막에삽입하기가간단한다 헤더노드를가질수있다 최종노드포인터가 NULL이다 리스트의 번째요소를가장빠르게찾을수있는구현방법은무엇인가 배열 단순연결리스트 원형연결리스트 이중연결리스트 단순연결리스트의노드포인터 가마지막노드를

PowerPoint Template

ABC 10장

Microsoft PowerPoint - ch08 - 구조체 (structure) am0845

0. 표지에이름과학번을적으시오. (6) 1. 변수 x, y 가 integer type 이라가정하고다음빈칸에 x 와 y 의계산결과값을적으시오. (5) x = (3 + 7) * 6; x = 60 x = (12 + 6) / 2 * 3; x = 27 x = 3 * (8 / 4

BMP 파일 처리

Microsoft PowerPoint - 6장 탐색.pptx

2002년 2학기 자료구조

비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2

윤성우의 열혈 TCP/IP 소켓 프로그래밍

C 언어 프로그래밊 과제 풀이

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

02장.배열과 클래스

; struct point p[10] = {{1, 2, {5, -3, {-3, 5, {-6, -2, {2, 2, {-3, -3, {-9, 2, {7, 8, {-6, 4, {8, -5; for (i = 0; i < 10; i++){ if (p[i].x > 0 && p[i

Data structure: Assignment 1 Seung-Hoon Na October 1, Assignment 1 Binary search 주어진 정렬된 입력 파일이 있다고 가정하자. 단, 파일내의 숫자는 공백으로 구 분, file내에 숫자들은

슬라이드 1

11강-힙정렬.ppt

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C D616E2E637070>

4. #include <stdio.h> #include <stdlib.h> int main() { functiona(); } void functiona() { printf("hihi\n"); } warning: conflicting types for functiona

Chapter 4. LISTS

chap7.key

Microsoft PowerPoint - 자료구조2008Chap07

SNU =10100 =minusby by1000 ÇÁto0.03exÇÁto0.03exÇÁ=10100 =minusby by1000 ·Îto0.03ex·Îto0.03ex·Î=10100 =minusby by1000 ±×to0.

1장. 리스트

SNU =10100 =minusby by1000 ÇÁto0.03exÇÁto0.03exÇÁ=10100 =minusby by1000 ·Îto0.03ex·Îto0.03ex·Î=10100 =minusby by1000 ±×to0.

Data structure: Assignment 3 Seung-Hoon Na December 14, 2018 레드 블랙 트리 (Red-Black Tree) 1 본 절에서는 레드 블랙 트리를 2-3트리 또는 2-3-4트리 대한 동등한 자료구조로 보고, 두 가지 유형의 레

Transcription:

균형이진탐색트리 -VL Tree delson, Velskii, Landis에의해 1962년에제안됨 VL trees are balanced n VL Tree is a binary search tree such that for every internal node v of T, the heights of the children of v can differ by at most 1 2 4 44 17 78 1 2 32 50 1 1 48 62 3 88 1 n example of an VL tree (heights are shown next to the nodes) ch10-32

Tri-node Restructuring height height of leaf node : 1 height of inner node: 1 + MX (height of left child, height of right child) height difference height difference = height of left child height of right child tri-node restructuring re-arrange three node so that the re-arranged subtree has height difference less than or equal to 1 diff 3 diff -3 diff -1 diff -1 (Example 1) ch10-33 (Example 2)

Tri-node Restructuring rotate_ll (1) Single rotation LL of subtree diff 2 ch10-34

Tri-node Restructuring rotate_ll (2) c = z a = x b = y T 3 rotate_ll() a = x T 0 T 1 b = y c = z T 2 T 0 T 2 T 3 T 1 ch10-35

Tri-node Restructuring rotate_rr (1) Single rotation RR of subtree diff -2 diff -1 ht 0 ch10-36

Tri-node Restructuring rotate_rr (2) a = z T 0 b = y c = x rotate_rr() a = z b = y c = x T 1 T 2 T 3 T 0 T 1 T 2 T 3 ch10-37

Tri-node Restructuring rotate_lr (1) Double rotation LR of subtree diff -1 diff 2 ch10-38

Tri-node Restructuring rotate_lr (2) c= z a = y b= x T 3 rotate_lr() a = y b = x c = z T 0 T 1 T 0 T 1 T 2 T 3 T 2 ch10-39

Tri-node Restructuring rotate_rl (1) Double rotation RL of subtree diff -2 ch10-40

Tri-node Restructuring rotate_rl (2) a = z T 0 b= x c= y rotate_rl() a = z b = x c = y T 3 T 2 T 1 T 2 T 0 T 1 T 3 ch10-41

lgorithm getheight() lgorithm getheight(treenode* ptn) height = 0; if (ptn!= NULL) height = 1 + max (getheight(ptn->pl), getheight(ptn->pr); return height; end lgorithm getheightdiff() lgorithm getheightdiff(treenode* ptn) heightdiff = 0; if (ptn == NULL) return 0; heightdiff = getheight(ptn->pl) - getheight(ptn->pr); return heightdiff; end ch10-42

lgorithm realance() lgorithm realance(treenode** pptn) heightdiff = getheightdiff(*pptn); if (heightdiff > 1) // left sub-tree is higher if (getheightdiff(*pptn->pl) > 0) *pptn = rotate_ll(*pptn); else *pptn = rotate_lr(*pptn); else if (heightdiff < -1) // right sub-tree is higher if (getheightdiff(*pptn->pr) < 0) *pptn = rotate_rr(*pptn); else *pptn = rotate_rl(*pptn); return *pptn; end ch10-43

lgorithm rotate_ll() lgorithm rotate_ll(treenode* pparent) TreeNode* phild; phild = pparent->pl; pparent->pl = phild->pr; phild->pr = pparent; return phild; end cl c cr b br a b rotate_ll() c a ar cl cr br ar diff 2 D rotate_ll() D h ch10-44

lgorithm rotate_rr(), lgorithm rotate_rr(treenode* pparent) TreeNode* phild; phild = pparent->pr; pparent->pr = phild->pl; phild->pl = pparent; return phild; end al a bl b cl c b rotate_rr() a c al bl cl cr cr diff -2 D rotate_rr() h D ch10-45

lgorithm rotate_lr() lgorithm rotate_lr(treenode* pparent) TreeNode* phild; a rotate_lr() c phild = pparent->pl; pparent->pl = rotate_rr(phild); return rotate_ll(pparent); end bl b cl c cr ar b a bl cl cr ar diff -1 diff -1 h 4 diff 3 E D setleft(rotate_rr()) h 4 diff 3 D E rotate_ll() D E ch10-46

lgorithm rotate_rl() lgorithm rotate_rl(treenode* pparent) TreeNode* phild; a rotate_rl() c phild = pparent->pr; pparent->pr = rotate_ll(phild); al c b a b return rotate_rr(pparent); end cl cr br al cl cr br h 4 diff -3 D setright(rotate_ll( )) E h 4 diff -3 diff -1 D diff -1 E rotate_rr( ) diff -1 D diff -1 E ch10-47

/* inary Tree with Rebalancing (1) */ #include <stdio.h> #include <stdlib.h> #define Element int typedef struct TreeNode { Element data; TreeNode *pl; TreeNode *pr; }TreeNode; int getheight(treenode *ptn); int getheightdiff(treenode *ptn); TreeNode *rotate_ll(treenode* pparent); TreeNode *rotate_rr(treenode* pparent); TreeNode *rotate_lr(treenode* pparent); TreeNode *rotate_rl(treenode* pparent); TreeNode *realance(treenode **pptn); TreeNode *insertwithoutrebalancing(treenode **pptn, Element elm); TreeNode *insertwithrebalancing(treenode **pptn, Element elm); void printelement(element elm); void printtreeinorder(treenode *ptn); void printtreeinorderylevel(treenode *ptn, int level); void fprinttreeinorderylevel(file *fout, TreeNode *ptn, int level); void deletellnodes(treenode *ptn); ch10-48

/* inary Tree with Rebalancing (2) */ #define NUM_DT 10 void main() { FILE *fout; TreeNode *proot1 = NULL; TreeNode *proot2 = NULL; int data[num_dt] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; fout = fopen("output.txt", "w"); if (fout == NULL) { printf("error in opening output.txt file!!"); exit; } for (int i = 0; i < NUM_DT; i++) { proot1 = insertwithoutrebalancing(&proot1, data[i]); fprintf(fout, "fter insert (%d) into inary Tree with Rebalancing: ", data[i]); fprinttreeinorderylevel(fout, proot1, 0); fprintf(fout, " n"); } deletellnodes(proot1); ch10-49

/* inary Tree with Rebalancing (3) */ } for (int i = 0; i < NUM_DT; i++) { proot2 = insertwithrebalancing(&proot2, data[i]); fprintf(fout, "fter insert (%d) into inary Tree with Rebalancing: ", data[i]); fprinttreeinorderylevel(fout, proot2, 0); fprintf(fout, " n"); } deletellnodes(proot2); fclose(fout); void deletellnodes(treenode *ptn) { if (ptn == NULL) return; else { deletellnodes(ptn->pl); deletellnodes(ptn->pr); free(ptn); return; } } ch10-50

void fprinttreeinorderylevel(file *fout, TreeNode *ptn, int level) { TreeNode* phild = NULL; if (ptn!= NULL) { if (level == 0) fprintf(fout, " nroot (data: "); fprintf(fout, "%2d", ptn->data); fprintf(fout, ") n"); phild = ptn->pl; for (int i = 0; i<level; i++) fprintf(fout, " "); if (phild!= NULL) { fprintf(fout, "L (data: "); fprinttreeinorderylevel(fout, phild, level + 1); } else { fprintf(fout, "L (NULL) n"); } } } phild = ptn->pr; for (int i = 0; i<level; i++) fprintf(fout, " "); if (phild!= NULL) { fprintf(fout, "R (data: "); fprinttreeinorderylevel(fout, phild, level + 1); } else { fprintf(fout, "R (NULL) n"); } ch10-51

Result of insertwithoutrebalancing() ch10-52

Intermediate Results of insertwithrebalancing() ch10-53

Homework 10 10.1 동적메모리할당의이진트리 (inary tree) 를기반으로한 Galaxy 구현 (1) 별 (star) 의정보를관리하기위한구조체 struct Star 를정의하라. struct Star 에는 string 타입의이름 (char name[16]), integer 타입의 id (identifier) 와 age 가있고, double 데이터타입의 distance, luminosity, mass, radius 가있다. (2) 함수 Star * genstar() 는하나의 star 를동적으로생성하며, star 의데이터멤버들을랜덤함수를사용하여임의의값으로초기화한후, 생성된 star 의주소를반환한다. starid 는중복되지않는값으로지정되어야하며, starname 은알파벳 a ~ z 5 ~ 10 자로구성된다. 데이터멤버 distance, luminosity, mass, radius 및 age 는 10.0 ~ 10000.0 범위의값을임의로가진다. (3) 함수 printstar(star *ps) 는구성된 Galaxy 에포함된 star 들의 starname, starid 를순서대로 ( 첫번째 (head) 노드부터마지막 (tail) 노드까지 ) 출력한다. (4) Star 들을관리하기위한이진트리를구현하라. 이진트리를구성하기위한구조체 TreeNode 는왼쪽자식과오른쪽자식을각각가리키기위한두개의포인터를가지며, 구조체 star 노드를가리키기위한포인터 Star *ps 를가진다. (5) 함수 void * insertwithrebalancing(treenode **ppt, Star *ps) 는이진트리의이중포인터 (TreeNode **ppt) 와추가될 star 노드의주소 (Star *ps ) 를전달받고, tree node 를동적으로생성하며, 생성된노드를이진트리내의올바른위치 (starid 의오름차순으로정렬되는 ) 에삽입하고, 필요에따라 tri-node restructuring (balancing) 을실행한다. ch10-54

(6) 함수 void printtreeinorder(treenode *pt) 는이진트리에포함된 star들을 inorder 순회 방식으로출력한다. 출력되는 star들은 starid값이오름차순으로정렬되어있어야한다. (7) 함수 Star *searchtree(treenode *pt, int starid) 는이진탐색트리에포함된 star 중에서지정된 starid값을가지는트리노드를찾아, 그트리노드의주소를반환한다. (8) genstar() 함수를사용하여 20개의 star들을동적으로생성하고, inserttreenode() 함수를사용하여이진탐색트리에차례로추가하라. 이렇게구성된이진탐색트리는 starid 값에따라오름차순으로정렬되어있어야한다. (9) 이진탐색트리를 in-order 순회 에따라출력하라. (10) searchtree() 함수를사용하여, starid값을가지는트리노드를탐색하고, 해당 star의다른데이터 (starname, distance, luminosity, mass, radius 및 age) 를출력하라. ch10-55