알고리즘/개념
[개념] 3.이진트리와 순회
스푼앤포크
2019. 11. 19. 16:42
이진트리(Binary Tree)란?
가장 많이 사용되는 *비선형 자료구조로, 데이터의 탐색 속도 빠르게 하기 위한 구조
*선형 자료구조의 경우: 배열, 스택, 큐가 해당
이진트리에서 데이터 탐색하는 방법 3가지
*가운데 노드가 어디에 위치하느냐로 구분하기
1. 전위순회 (가운데 노드가 맨앞)
2. 중위순회 (가운데 노드가 중간)
3. 후위순회 (가운데 노드가 맨뒤)
*Class와 Struct 차이
-구조체에서 함수 추가한게 클래스 =>구조체가 클래스보다 하위계층
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
#include<iostream>
using namespace std;
int number = 15;
typedef struct node *treePointer;
typedef struct node{
int data;
treePointer leftChild, rightChild;
}Node;
//전위순회
void preorder(treePointer ptr){
if(ptr){
cout<<ptr->data<<" ";
preorder(ptr->leftChild);
preorder(ptr->rightChild);
}
}
//중위순회
void inorder(treePointer ptr){
if(ptr){
inorder(ptr->leftChild);
cout<<ptr->data<<" ";
inorder(ptr->rightChild);
}
}
//후위순회
void postorder(treePointer ptr){
if(ptr){
postorder(ptr->leftChild);
postorder(ptr->rightChild);
cout<<ptr->data<<" ";
}
}
int main(){
Node nodes[number+1];
for(int i=1; i<=number;i++){
nodes[i].data = i;
nodes[i].leftChild = NULL;
nodes[i].rightChild = NULL;
}
for(int i=1; i<=number;i++){
if(i%2==0){
nodes[i/2].leftChild = &nodes[i];
}else
{
nodes[i/2].rightChild = &nodes[i];
}
}
preorder(&nodes[1]);
cout<<"\n";
postorder(&nodes[3]);
cout<<"\n";
inorder(&nodes[2]);
}
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter
|
**나동빈님 강의 정리하면서 공부한 내용입니다.
|본 포스팅은 쿠팡 파트너스의 일환으로 소정의 수수료를 제공받을 수 있음을 알립니다 |