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