Microsoft PowerPoint - lec07_tree [호환 모드]

Similar documents
Microsoft PowerPoint - chap10_tree

슬라이드 1

Ch.1 Introduction

o 경로 (path) 트리에서사용하는용어 ~ 어떤한노드에서다른노드까지링크를통해이동했을때, 거쳐온노드들의집합. o 루트 (root) ~ 트리의가장상위에있는노드로루트는항상하나만존재 o 부모, 자식 (parent, children) ~ 링크로연결된노드중위에있는노드를부모노드,

7장

08장.트리

슬라이드 1

슬라이드 1

슬라이드 1

chap 5: Trees

chap 5: Trees

입학사정관제도

제 1 장 기본 개념

05_tree

Microsoft PowerPoint - 제8장-트리.pptx

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

Chapter 08. 트리(Tree)

Microsoft PowerPoint - 자료구조2008Chap07

제 11 장 다원 탐색 트리

슬라이드 1

Microsoft PowerPoint - 제9장-트리의응용.pptx

Microsoft PowerPoint - Chap5 [호환 모드]

슬라이드 1

e-비즈니스 전략 수립

슬라이드 1

Microsoft PowerPoint - 6장 탐색.pptx

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

1장. 리스트

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

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

4.1 관계

PowerPoint 프레젠테이션

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

Chap 6: Graphs

슬라이드 제목 없음

슬라이드 1

슬라이드 1

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

06장.리스트

Microsoft PowerPoint - Chap5 [호환 모드]

5 장 트 리

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

C 언어 강의노트

OCW_C언어 기초

CH06)자료구조.hwp

Chapter 4. LISTS

11장 포인터

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

11강-힙정렬.ppt

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

리스트 (list), 선형리스트 (linear list): 순서를가진항목들의모임 집합 : 항목간의순서의개념이없음 L = n ( item0, item1,..., item -1) l 리스트의예 l 요일 : ( 일요일, 월요일,, 토요일 ) l 한글자음의모임 : ( ㄱ, ㄴ

1장. 리스트

Algorithms

Chapter 4. LISTS

슬라이드 1

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

Microsoft PowerPoint - chap04-연산자.pptx

2002년 2학기 자료구조

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

03_queue

1장. 리스트

슬라이드 1

1. 리스트개념 리스트 (list) 고정된길이의자료 ( 원소 ) 들을순차적으로나열해놓은집합을가르키는자료구조의추상적인개념 순서를가진항목들의모임 집합 (set) : 항목간의순서의개념이없음 리스트의예 요일 : ( 일요일, 월요일,, 토요일 ) 한글자음의모임 : (ᄀ,ᄂ,,ᄒ

리스트구현방법 배열 (array) 을이용하는방법 구현이간단 삽입, 삭제동작에따른원소이동. 항목의개수제한, 정적기억공간할당. 메모리낭비, 오버플로우 연결리스트 (linked list) 를이용하는방법 구현이복잡 삽입, 삭제가효율적 크기가제한되지않음 Lecture 03_Li

Chap 6: Graphs

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

PowerPoint 프레젠테이션

<4D F736F F F696E74202D20C1A637C0E52DB0EDB1DEBFACB0E1B8AEBDBAC6AE2E >

리스트연산, 검색 + 삽입 + 삭제 새로운항목을리스트의처음, 중간, 끝에추가. 기존의항목을리스트의임의의위치에서삭제. 모든항목을삭제. 기존항목을대치 (replace). 리스트가특정항목을가지고있는지를검색 (search). 리스트의특정위치의항목을반환. 리스트안의항목의개수를센

슬라이드 1

Microsoft PowerPoint - chap4_list

Microsoft PowerPoint - chap-11.pptx

PowerPoint Presentation

14장.탐색

<4D F736F F F696E74202D FBFACB0E120C0DAB7E1B1B8C1B6205BC8A3C8AF20B8F0B5E55D>

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

EA0015: 컴파일러

ABC 10장

Microsoft PowerPoint - ch07 - 포인터 pm0415

슬라이드 1

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

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

중간고사 (자료 구조)

Microsoft PowerPoint - 07-chap05-Stack.ppt

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

adfasdfasfdasfasfadf

03장.스택

Chap 6: Graphs

untitled

Microsoft PowerPoint Backtracking.pptx

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

v 이원탐색트리 (binary search tree) u 인덱스를조직하는한가지방법 u 이진트리 (binary tree) 유한한수의노드를가진트리 공백 (empty) 이거나루트와두개의분리된이진트리즉, 왼쪽서브트리 (left subtree) 와오른쪽서브트리 (right su

11장 포인터

Microsoft PowerPoint - 08-Queue.ppt

Microsoft PowerPoint - 08-chap06-Queue.ppt

09J1_ _R.hwp

쉽게배우는알고리즘 5 장. 검색트리 IT COOKBOOK 5 장. 검색트리 나는보다응용력있는유형의수학이라는이유때문에컴퓨터과학을하고싶었다. - 로버트타잔 한빛미디어 1

o 스택 (stack) ~ 쌓아놓은더미 1. 스택의개요 - 2 -

PowerPoint 프레젠테이션

Transcription:

Tree 2008학년도 2학기 kkman@sangji.ac.krac kr -1-

트리 (Tree) 1. 개요 ~ 계층적인구조를나타내는비선형 (Non-linear) 자료구조 ~ 트리는부모 - 자식관계의노드로구성 ~ 응용분야 계층적인조직표현 파일시스템 인공지능에서의결정트리 -2-

트리자료구조를사용하는이유? ~ 다른자료구조와달리비선형구조. ~ 정렬된배열 탐색은빠르지만 O(logN), 삽입 / 삭제는느림 (O(N)). ~ 연결리스트 ~ 트리 삽입 / 삭제는빠르지만 (O(1)), 탐색은느림 (O(N)). 삽입과삭제, 탐색이모두빠름 (O(logN)). -3-

경로 (path) 트리에서사용하는용어 ~ 어떤한노드에서다른노드까지링크를통해이동했을때, 거쳐온노드들의집합. 루트 (root) ~ 트리의가장상위에있는노드로루트는항상하나만존재 부모, 자식 (parent, children) ~ 링크로연결된노드중위에있는노드를부모노드, 아래있는노드를자식노드. 키(key) ~ 자료항목을찾거나또는다른동작을하기위해필요한값 ~ 각자료항목을구분해주는역할, 자료항목을대표하는값 -4-

하위트리 (subtree) ~ 하나의큰트리에속해있는부분트리. 방문 (visiting) ~ 노드에도착해노드의자료값을읽는행위. 순회 (traversing) ~ 트리의노드전체를방문하는행위. 레벨 (level) ~ 어떤노드의레벨은루트노드로부터얼마나많이떨어졌는지를의미 ~ 여기에서는루트를레벨 1 로가정. 높이 (height) ~ 높이는최장루트- 잎경로의길이이다. -5-

노드 (node) ~ 트리의구성요소 루트 (root) ~ 부모가없는노드 (A) A 서브트리 (subtree) ~ 하나의노드와그노드들의자손들로이루어진트리 단말노드 (leaf node) ~ 자식이없는노드 (A,B,C,D) B C D 비단말노드 ~ 적어도하나의자식을가지는노드 (E,F,G,H,I,J) 레벨 (level) ~ 트리의각층의번호 E F G H I J 높이 (height) ~ 트리의최대레벨 (3) 차수 (degree) ~ 노드가가지고있는자식노드의개수 -6-

-7-

트리의일반적인성질 한노드에서다르노드로가는경로가유일 ~ 임의의두노드에대해최소공통선조 (least common ancestor) 를갖음. 두노드가가질수있는가장가까운선조 ~ 경로가중복되지않는다면두노드간의경로는반드시한노드에서최소공통선조까지올라갔다다른노드로내려오는유일한경로만이존재. N 개의노드를갖는트리는 N-1 개의링크. ~ 그래프와달리루트를제외하고는모든노드가자신의선조를향한하나의링크를가지고있음. ~ N 개의노드를가진트리는 N-1 개의링크를갖음. -8-

이진트리 (binary tree) 2. 이진트리 ~ 트리구조중자식을최대둘까지가질수있는트리 ~ 모든노드의차수가 2 이하 구현하기가편리함 ~ 모든노드가 2 개의서브트리를가지고있는트리 ~ 서브트리는공집합일수있음. ~ 이진트리에는서브트리간의순서가존재 ~ 각노드들은자식이없거나, 하나또는두개의자식노드를유지 ~ 가장보편적인트리구조, 이진탐색트리 (binary search tree) -9-

특징 생김새 ~ 왼쪽자식 (left child), 오른쪽자식 (right child). ~ 왼쪽자식의키 (key) 는부모노드의키보다작고, 오른쪽자식의키는부모노드의키보다크다. -10-

노드의개수가 n 개이면간선의개수는 n-1-11-

높이가 h 인이진트리 ~ 최소 h 개의노드 ~ 최대 2 h -1 개의노드 -12-

n 개의노드를가지는이진트리의높이 ~ 최대 n, 최소 log 2 (n+1) -13-

완전이진트리 (complete binary tree) ~ 마지막레벨을제외한각레벨의노드들이모두차있고, 마지막레벨에서는노드들이순서대로존재하는상태 꽉찬이진트리 (full binary tree) ~ 모든레벨이꽉찬이진 v 트리 -14-

-15-

배열표현법 3. 이진트리구현 ~ 모든이진트리를포화이진트리라고가정 ~ 각노드에번호부여, 그번호를배열의인덱스 -16-

배열구현법에서인덱스결정 ~ 노드 i 의부모노드인덱스 : i/2 ~ 노드 i 의왼쪽자식노드인덱스 : 2i ~ 노드 i 의오른쪽자식노드인덱스 : 2i+1-17-

링크표현법 ~ 포인터를이용하여부모노드가자식노드를가리키게하는방법 -18-

노드구조, in C ~ 노드 구조체로구현 각노드가포인터 (= 링크 ) 를가지고있어노드와노드를연결 typedef struct TreeNode { } int data; struct TreeNode struct TreeNode *left; *right; ~ 교재 p.256, 프로그램 7.1 참고. -19-

순회 (traversal) 4. 트리순회 (traverse) ~ 트리의노드들을체계적으로방문하는것 순회방법 ~ 전위순회 (preorder traversal), VLR ~ 자손노드보다루트노드를먼저방문. ~ 중위순회 (inorder traversal), LVR ~ 왼쪽자손, 루트, 오른쪽자손노드순서로방문. ~ 후위순회 (postorder traversal), LRV ~ 루트노드보다자손노드를먼저방문. -20-

전위순회 전위순회 (Preorder Traverse) ~ 루트를먼저방문하는순회방법 1. 루트노드. 2. 왼쪽하위트리. 3. 오른쪽하위트리. // 전위순회 preorder( TreeNode *root ){ if ( root ){ } } printf("%d", root->data t ); // 노드방문 preorder( root->left ); // 왼쪽서브트리순회 preorder( root->right ); // 오른쪽서브트리순회 -21-

-22-

중위순회 중위순회 (Inorder Traverse) ~ 왼쪽서브트리 -> 루트 -> 오른쪽서브트리순서로방문 1. 왼쪽하위트리. 2. 노드를방문. 3. 오른쪽하위트리. // 중위순회 inorder( TreeNode *root ){ if ( root ){ } } inorder( root->left );// 왼쪽서브트리순회 printf("%d", root->data ); // 노드방문 inorder( root->right );// 오른쪽서브트리순회 -23-

5 + 2 7 * / 1 3 6 8 a b c d -24-

-25-

후위순회 후위순회 (Postorder Traverse) ~ 왼쪽서브트리 -> 오른쪽서브트리 -> 루트노드순으로방문 1. 왼쪽하위트리방문. 2. 오른쪽하위트리방문. 3. 노드방문. // 후위순회 postorder( TreeNode *root ){ if ( root ){ } } postorder( root->left );// 왼쪽서브트리순회 postorder( root->right );// 오른쪽서브트리순회 printf("%d", root->data ); // 노드방문 -26-

-27-

선택방법 전위, 중위, 후위순회구현 교재 p.265, 프로그램 7.3 참고. 레벨순회, 그림 7-31, 프로그램 7.4 참고. -28-

수식트리 수식트리 (evalaution tree) ~ 산술식을트리형태로표현한것 비단말노드 : 연산자 (operator) 단말노드 : 피연산자 (operand) -29-

수식 a + b a - (b c) (a < b) or (c < d) 전위순회 +ab - a bc or < a b < c d 중위순회 a + b a - b c a < b or c < d 후위순회 a b + a b c - a b < c d < or -30-

노드개수 5. 이진트리연산 ~ 탐색트리안의노드의개수를계산 ~ 각서브트리에대하여순환호출한다음, 반환되는값에 1 을더하여반환 int get_node_count(treenode *node) { int count=0; if( node!= NULL ) count = 1 + get_node_count(node count(node->left)+ get_node_count(node->right); return count; } -31-

트리높이구하기 ~ 서브트리에대하여순환호출 ~ 서브트리들의반환값중에서최대값을구하여반환 int get_height(treenode *node) { } int height=0; if( node!= NULL ) height = 1 + max(get_height(node->left), get_height(node->right)); return height; -32-

정의및특징 6. 스레드이진트리 ~ 이진트리의 NULL 링크를이용하여순환호출없이도트리의노드들을순회 ~ NULL 링크에중위순회시에후속노드인중위후속자를저장시켜놓은트리 ~ 단말노드와비단말노드의구별을위히여 is_thread 필드필요 -33-

이진트리 (binary tree) ~ 모든원소의키는유일 7. 이진트리탐색 ~ 왼쪽서브트리의키값들은루트의키값보다작다. ~ 오른쪽서브트리의키값들은루트의키값보다크다. ~ 왼쪽과오른쪽서브트리도이진트리의특성유지. -34-

탐색 (search) ~ 어떤주어진키를가지고그키와동일한값을갖는노드를찾는것. ~ 루트노드부터방문하여노드의키값과주어진키값을비교하여내려가는식으로진행. Public Node find(int key) { Node current = root; while (current.keydata!= key) { if (current == null) return null; if (key < current.keydata) current = current.leftchild; else current = current.rightchild; } return current; } -35-

특징 ~ 탐색작업을효율적으로하기위한자료구조 ~ key( 왼쪽서브트리 ) key( 루트노드 ) key( 오른쪽서브트리 ) ~ 이진탐색를중위순회하면오름차순으로정렬. -36-

알고리즘 ~ 비교한결과가같으면탐색성공. ~ 주어진키값이루트노드의키값보다작으면탐색은이루트노드의왼쪽자식을기준으로다시시작. ~ 주어진키값이루트노드의키값보다크면탐색은이루트노드의오른쪽자식을기준으로다시시작. -37-

search(x, k) if x=null if k=x->key then return NULL; then return x; else if k<x->key then return search(x->left, k); else return search(x->right, k); -38-

-39-

최대값과최소값탐색 ~ 현노드보다작은값은왼쪽자식에, 큰값은오른쪽자식에위치 ~ 최소값 트리의가장왼쪽 ~ 최대값 트리의가장오른쪽에존재 ~ 루트에서왼쪽자식을따라내려가면서더이상왼쪽자식이없는노드를만나면그노드가최소값을가진노드 ~ 최대값은오른쪽자식을따라가면찾을수있다. -40-

pubilc Node findmin() { } Node current = root; while (current.leftchild!= null) current = current.leftchild; return current; public Node findmax() { } Node current = root; while (current.rightchild!= null) current = current.rightchild; rightchild; return current; -41-

-42-

방법 이진트리에서삽입 ~ 노드가삽입될위치탐색. ~ 적절한경로를따라내려간뒤그위치의부모가되는노드탐색 ~ 삽입될위치의부모노드의키보다삽입될노드의키가작다면부모노드의왼쪽자식으로, 크다면부모노드의오른쪽자식으로생성. -43-

-44-

insert_node(t,z) p NULL; t root; while t NULL do p t; if z->key < p->key then t p->left; else t p->right; if p=null then root z;// 트리가비어있음 else if z->key < p->key then p->left z else p->right z -45-

이진트리에서삭제 3 가지의경우 ~ 삭제하려는노드가단말노드일경우 ~ 삭제하려는노드가하나의왼쪽이나오른쪽서브트리중하나만가지고있는경우 삭제하려는노드의자식노드가하나일때 ~ 삭제하려는노드가두개의서브트리모두가지고있는경우 삭제하려는노드의자식노드가둘일때 -46-

1. 삭제하려는노드의자식이없을때, 단말노드삭제 ~ 삭제노드의부모노드에게서삭제노드를가리키는링크를 null If (current.leftchild == null && current.rightchild == null) { if (current == root) root = null; else if (current == parent.leftchild) parent.leftchild = null; else parent.rightchild = null; } -47-

~ 단말노드의부모노드를찾아서연결을삭제 (null) -48-

2. 삭제하려는노드의자식이하나일때 ~ 삭제하려는노드의자식노드와부모노드를바로연결. -49-

-50-

3. 삭제하려는노드의자식이둘일때 ~ 삭제하려는노드의자식중하나로그위치를대체할수없음 ~ 삭제될노드의위치를채워줄후보노드선정. 후보노드 (candidate node) ~ 삭제될노드의키값보다바로위의키값을가진노드나바로아래의키값을가진값을후보노드로선택. -51-

후보노드선정 1 ~ 삭제될노드보다큰값을갖는 ( 오른쪽 ) 서브트리선택. ~ 서브트리에서가장작은값을갖는노드를후보노드로지정. -52-

후보노드선정 2 ~ 삭제될노드보다작은값을갖는 ( 왼쪽 ) 서브트리선택. ~ 서브트리에서가장큰값을갖는노드를후보노드로지정. -53-

삭제하려는노드의자식이둘일때 ~ 잘못된대체의예 -54-

후보노드가삭제노드의오른쪽자식일경우 ~ 부모노드에서삭제노드에대한링크절단 ~ 후보노드로링크를연결. ~ 삭제노드의왼쪽자식은삭제노드와의링크절단, 후보노드의왼쪽자식으로링크. -55-

후보노드가삭제노드의오른쪽자식의왼쪽자손일경우 ~ 후보노드의오른쪽자식 후보노드의부모노드에대한왼쪽자식노드로저정 ~ 삭제노드의오른쪽자식 후보노드의오른쪽자식으로지정. ~ 부모노드에서삭제노드에대한링크절단, 후보노드로연결 ~ 삭제노드의왼쪽자식 삭제노드와의링크를끊고후보노드의왼쪽자식으로연결 -56-

-57-

-58-

특징 4.7 효율성 ~ 트리연산은하위레벨로의탐색을포함. ~ 꽉찬트리에서노드의반정도가맨아래레벨에존재. ~ 노드들에대한연산 ( 삽입, 삭제등 ) 은최하위레벨에있는노드까지찾는연산을필요로함 ~ 탐색하는동안최소한하나의레벨에하나의노드를방문 ~ 어떠한연산을하는데걸리는시간은트리의레벨에따라유추 노드의수를 N, 레벨의수를 L ~ L = log 2 (N + 1) -59-