CHAP 7: 트 리 (1) 한 성 대 학 교 정보통신공학과 봉 정 식.

Slides:



Advertisements
Similar presentations
1. 2 차원 배열  배열은 동일한 데이터 유형으로 여러 개의 변수를 사용할 경우 같은 이 름으로 지정하여 간편하게 사용할 수 있도록 하는 것으로서 앞에서 1 차원 배열을 공부하였습니다.  2 차원 배열은 바둑판을 생각하면 되며, 1 차원 배열에서 사용하는 첨자를 2.
Advertisements

Chapter 8. 트리. 개요  트리의 개념, 용어, 방향 트리, 분자식과 같은 응용 분야  이진 트리의 종류, 배열 및 연결 리스트에 의한 이진 트리의 표현법, 중순위 탐방, 전순위 탐방 그리고 후순위 탐방  생성 트리와 최소 비용 생성 트리, 프림의 알고리즘과.
이진 나무 구조 강윤섭 2008년 5월 23일.
주요 내용 기본 용어 이진 트리(binary tree) 이진 탐색 트리(binary search tree)
제 5 장 트 리.
자료구조: CHAP 7 트리(1) 순천향대학교 컴퓨터공학과 하 상 호.
CHAP 8:우선순위큐 C로 쉽게 풀어쓴 자료구조 Slide 1 (of 20).
T-tree 엄종진 강원대학교 컴퓨터과학과.
연결리스트(linked list).
트리 이 현 직
자료구조론 9장 트리(tree).
Internet Computing KUT Youn-Hee Han
CHAP 7:트리.
7장 이원 탐색 트리.
CHAP 7:트리 C로 쉽게 풀어쓴 자료구조 Slide 1 (of 50).
강의 #7 트리(Tree).
CHAP 7:트리 C로 쉽게 풀어쓴 자료구조 생능출판사 2011.
제 7 장. 트리(Tree).
제3장 스택과 큐.
P150 문제를 프로그래밍 할 것 Source file (헤더파일포함), 실행화면 (학번_이름_1.txt)
Error Detection and Correction
이진트리 순회 트리내의 모든 노드를 특정 순서에 따라 한번씩 방문 하는 것 방문 순서 R: Moving Right Child
제 11 장 다원 탐색 트리.
CHAPTER 5 트리(Tree).
2007 1학기 11 프로젝트 기초 실습.
제 5 장 트 리 5.1 트리 5.2 이진 트리 5.3 스레드 이진 트리.
자료구조: CHAP 7 트리(1) 순천향대학교 컴퓨터공학과 하 상 호.
자료구조: CHAP 4 리스트 (3) 순천향대학교 컴퓨터공학과 하 상 호.
프로그래밍 랩 – 7주 리스트.
자료구조 과제 풀이(6,7,8차) Yong-hwan Kim
13. 탐색 트리.
Introduction To Data Structures Using C
Tree & Heap SANGJI University Kwangman Ko
CHAP 7:트리 C로 쉽게 풀어쓴 자료구조 생능출판사 2005.
C 프로그래밍 C언어 (CSE2035) (Chap11. Derived types-enumerated, structure, and union) (1-1) Sungwook Kim Sogang University Seoul, Korea Tel:
JA A V W. 03.
인터넷응용프로그래밍 JavaScript(Intro).
13. 포인터와 배열! 함께 이해하기 IT응용시스템공학과 김 형 진 교수.
자료구조: CHAP 7 트리 –review 순천향대학교 컴퓨터공학과 하 상 호.
Tree & Heap SANGJI University Kwangman Ko
CHAP 7:트리 C로 쉽게 풀어쓴 자료구조 생능출판사 2005.
Quiz #7 다음 수들을 합병 정렬과 퀵 정렬 알고리즘을 이용하여 오름 차순으로 정렬하였을 때, 데이터 이동 회수를 각각 구하라. 여러분은 정렬 과정을 단계별로 보이면서 이동 회수를 추적해야 한다. 단, 퀵 정렬시에 피봇으로 배열의 왼쪽 첫 번째 원소를 선택한다. 5.
8장. 상호 배타적 집합의 처리.
11장 균형 탐색 트리.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
연산자 (Operator).
알고리즘: 우선순위 큐(8장) 순천향대학교 컴퓨터 학부 하 상 호.
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
컴퓨터 프로그래밍 기초 - 5th : 조건문(if, else if, else, switch-case) -
자료구조: CHAP 7(2) 트리 순천향대학교 컴퓨터공학과 하 상 호.
CHAP 12: 탐색 순천향대학교 컴퓨터학부 하 상 호.
CHAP 12: 탐색 순천향대학교 컴퓨터학부 하 상 호.
13장. 균형 탐색 트리 and the pain you must suffer to learn them
트리.
객체기반 SW설계 팀활동지 4.
균형이진탐색트리 이진 탐색(binary search)과 이진 탐색 트리(binary search tree)와의 차이점
CHAP 12 : 탐색 C로 쉽게 풀어쓴 자료구조 Slide 1 (of 27).
알고리즘: 우선순위 큐(8장) 순천향대학교 컴퓨터 학부 하 상 호.
4장. 데이터 표현 방식의 이해. 4장. 데이터 표현 방식의 이해 4-1 컴퓨터의 데이터 표현 진법에 대한 이해 n 진수 표현 방식 : n개의 문자를 이용해서 데이터를 표현 그림 4-1.
7주차: Functions and Arrays
Chapter 07 트리.
Numerical Analysis Programming using NRs
제 4장 트리.
트리 (Logical) Data Structures Linear list Tree Graph Linear structures
컴퓨터 개론 √ 원리를 알면 IT가 맛있다 쉽게 배우는 컴퓨터 기본 원리 한빛미디어 교재출판부.
제 4 장 Record.
우선순위 큐 & Heap Ref. C로 쉽게 풀어쓴 자료구조, 생능출판사, 2005.
13. 포인터와 배열! 함께 이해하기.
C++ Espresso 제15장 STL 알고리즘.
11. 트리.
Presentation transcript:

CHAP 7: 트 리 (1) 한 성 대 학 교 정보통신공학과 봉 정 식

트리(TREE) 트리: 계층적인 구조를 나타내는 자료구조 트리는 부모-자식 관계의 노드들로 이루어진다. 응용분야: 트리: 계층적인 구조를 나타내는 자료구조 트리는 부모-자식 관계의 노드들로 이루어진다. 응용분야: 계층적인 조직 표현 파일 시스템 인공지능에서의 결정트리

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

이진트리(binary tree) 이진 트리(binary tree) - 모든 노드가 2개의 서브 트리를 가지고 있는 트리 서브트리는 공집합일수 있다. 이진트리의 노드에는 최대 2개까지의 자식 노드가 존재 모든 노드의 차수가 2 이하가 된다-> 구현하기가 편리함 이진 트리에는 서브 트리간의 순서가 존재

이진트리의 성질 노드의 개수가 n개이면 간선의 개수는 n-1 높이가 h인 이진트리의 경우, 최소 h개의 노드를 가지며 최대 2h-1개의 노드를 가진다.

이진트리의 성질 n개의 노드를 가지는 이진트리의 높이는 최대 n이거나 최소

이진트리의 분류 포화 이진 트리(full binary tree): 트리의 각 레벨 에 노드가 꽉 차있는 이진트리 완전 이진 트리(complete binary tree): 높이가 h 일 때 레벨 1부터 h까지는 노드가 모두 채워져 있 고 마지막 레벨 h에서는 왼쪽부터 오른쪽으로 노드 가 순서대로 채워져 있는 이진트리

이진트리의 분류

이진트리의 표현 배열표현법: 모든 이 진트리를 포화이진트리 라고 가정하고 각 노드에 번호를 붙여서 그 번호를 배열의 인덱스로 삼아 노드의 데이터를 배열에 저장하는 방법

이진트리의 표현 링크표현법: 포인터를 이용하여 부모노드가 자식 노드를 가리키게 하는 방법

이진트리의 순회 순회(traversal) - 트리의 노드들을 체계적으로 방문하는 것 3가지의 기본적인 순회방법 전위순회(preorder traversal)    : VLR 자손노드보다 루트노드를 먼저 방문한다. 중위순회(inorder traversal)   : LVR 왼쪽 자손, 루트, 오른쪽 자손 순으로 방문한다. 후위순회(postorder traversal)  : LRV 루트노드보다 자손을 먼저 방문한다.

전위순회 1 2 5 9 3 4 6 7 8 10 11 루트를 먼저 방문하는 순회방법 응용분야: (예) 구조화된 문서출력 // 전위 순회 preorder( TreeNode *root ){   if ( root ){     printf("%d", root->data ); // 노드 방문     preorder( root->left ); // 왼쪽서브트리 순회     preorder( root->right );// 오른쪽서브트리 순회     } } 1 2 5 9 3 4 6 7 8 10 11

중위순회 왼쪽서브트리->루트->오른쪽 서브트리 순으로 방문 + * / a b c d 4 2 6 1 3 5 7 // 중위 순회 inorder( TreeNode *root ){   if ( root ){     inorder( root->left );// 왼쪽서브트리 순회     printf("%d", root->data );  // 노드 방문     inorder( root->right );// 오른쪽서브트리 순회     } } 4 + 2 6 * / 1 3 5 7 a b c d

후위순회 왼쪽서브트리 -> 오른쪽서브트리 -> 루트 순으로 방문 (예) 디렉토리 용량 계산 5 4 1 2 3 왼쪽서브트리 -> 오른쪽서브트리 -> 루트 순으로 방문 (예) 디렉토리 용량 계산 // 후위 순회 postorder( TreeNode *root ){ if ( root ){ postorder( root->left );// 왼쪽서브트리 순회 postorder( root->right );// 오른쪽서브트리순회 printf("%d", root->data );// 노드 방문 } 5 4 1 2 3

수식 트리 수식트리: 산술식을 트리형태로 표현한 것 예) 비단말노드: 연산자(operator) 단말노드: 피연산자(operand) 예) 수식 a + b a - (b × c) (a < b) or (c < d) 전위순회 + a b - a × b c or < a b < c d 중위순회 a - b × c a < b or c < d 후위순회 a b + a b c × - a b < c d < or

수식트리계산 후위순회를 사용 서브트리의 값을 순환호출로 계산 비단말노드를 방문할때 양쪽서브트리의 값을 저장된 연산자를 이용하여 계산한다. evaluate(exp) if exp = NULL then return 0; else x←evaluate(exp->left); y←evaluate(exp->right); op←exp->data; return (x op y);

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

이진트리연산: 단말 노드 개수 트리안의 노드들을 전체적으로 순회 트리안의 노드들을 전체적으로 순회 순회하면서 만약 왼쪽자식 과 오른쪽 자식이 동시에 0 이 되면 단말노드이므로 1 을 반환하며, 만약 그렇지 않으면 비단말 노드이므로 각각의 서브 트리에 대하여 순환 호출한 다음, 반환값 을 서로 더한다. int get_leaf_count(TreeNode *node) { int count = 0; if( node != NULL ) { if( node->left == NULL && node->right == NULL) return 1; else count = get_left_count(node->left) + get_left_count(node->right); } return count; 1 3 2 6

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

@ To be continue...