일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- postorder
- tensorflow
- 웹 용어
- pycharm
- classification
- vscode
- CES 2O21 참가
- KNeighborsClassifier
- inorder
- 데이터전문기관
- mglearn
- web 사진
- discrete_scatter
- web
- html
- cudnn
- 재귀함수
- CES 2O21 참여
- bccard
- java역사
- web 개발
- 결합전문기관
- 머신러닝
- 대이터
- 자료구조
- C언어
- paragraph
- web 용어
- broscoding
- Keras
- Today
- Total
bro's coding
Tree and Queue(연산) in C 본문

1. include and define

stdio를 include하고 queue를 이용하기 위해 queue의 최대 크기를 define 한다.
2. 구조체 선언과 Tree의 root


T(tree)Node 구조체를 선언한다
struct TNode *left : Tree에서 왼쪽 아래에 위치하는 것을 의미
char data : node의 내용
struct TNode *right : Tree에서 오른쪽 아래에 위치하는 것을 의미

TNode *root : TNode에 대한 (root)시작점을 알려주는 전역변수

Queue를 위한 구조체 선언

*data : queue에 저장 될 내용
[MAX_QUEUE_SIZE] : queue에 저장될 최대 갯수
3. Queue


오류가 발생하면 error message를 출력

queue의 front 와 rear값을 -1로 초기화

queue가 비어있다면 1(true) 아니면fault)반환
(front==rear) : empty

queue가 가득 차있다면 1(true) 아니면fault)반환
(front==MAX_QUEUE_SIZE) : full

queue에 node를 삽입하기 위한 함수

if(queue full이면) 에러코드는 queueFull

q안의 data[rear+1]의 위치에 item이라는 data를 저장

삭제(출력)를 위한 함수

if(queue empty이면) 에러코드는 queueEmpty

*q안의 data[front+1]의 내용을 반환
4. Tree 순회(traversal)evaluate


inorder traversal(data(출력)가 중간(in)에 있음)
if(r안의 left가 NULL이 아니면 다시 InOider함수를 호출해서(아까 NULL이 아니였던) r안의 left값을 넣음
(r->left가 NULL일 때 까지 반복(재귀함수))
r->left가 NULL이 되었으면
r->data를 출력
if(방금 data를 출력 한 r안의 right가 NULL이 아니면 다시 InOider함수를 호출해서(아까 NULL이 아니였던) r안의 right값을 넣음
다시 r->left check
r->data를 출력
다시 r->right check
쭉쭉쭉(재귀함수)

preorder traversal (data(출력)가 맨 앞(pre)에 있음)

postorder traversal (data(출력)가 맨 뒤(post)에 있음)

levelorder traversal(위에서 부터 좌에서 우로 순차적으로 읽어나감)
사실 levelorder을 위에 queue를 구연함

ptr(root)가 NULL이면 retrun

변수 선언

queue 초기화(front=-1,rear=-1)

ptr(root)을 q라는 queue에 삽입

while (무한 반복) {

data에 queue값을 삽입(root가 삽입되는거임)

if(data가 null이면) 무한루프 탈출

data출력

if(data의 left가 null이 아니라면)
queue에 data의 left값을 삽입

if(data의 right가 null이 아니라면)
queue에 data의 right값을 삽입

if(queue가 비어있다면) 무한루프 탈출
5. evaluate


if(root가 NULL이면)종료

if(root의 left와 right가 NULL이면)root의 data를 반환
재귀함수의 exit 혹은 node가 root하나 일때를 대비

op1에 evaluate(root의 left)
op2에 evaluate(root의 right)
재귀함수화 한다

연산
5. main

'[IT] > [Data structure] in C' 카테고리의 다른 글
datastructure.Linked list(다항식 덧셈) in C (0) | 2019.10.07 |
---|