반응형
사용자로부터 5개의 숫자를 차례대로 입력받아 트리를 생성한다. (5개의 숫자는 postorder 순으로 입력)
가령, 9, 11, 5, 7, 3 이 입력된 경우, 아래와 같은 구조의 트리를 만든다.
3
/ \
5 7
/ \
9 11
각 노드를 만들어 연결하기 위해 다음과 같은 makeNode() 함수를 이용한다.
makeNode() 함수의 인자와 반환 값은 다음과 같다.
TreeNode * makeNode(int data, TreeNode *left, TreeNode *right)
data: 노드에 저장될 데이터 (정수)
left: 왼쪽 자식 노드의 주소
right: 오른쪽 자식 노드의 주소
반환값: 생성된 노드의 주소
생성된 트리의 preorder, inorder, postorder 순회 결과를 차례대로 출력한다.
<입출력 예>
9 11 5 7 3
3 5 9 11 7
9 5 11 3 7
9 11 5 7 3
#include <stdio.h>
#include <stdlib.h>
typedef struct TreeNode{
int data;
struct TreeNode *left,*right;
}TreeNode;
// 노드 생성 함수 (인자: 데이터, 왼쪽 자식 주소, 오른쪽 자식 주소)
// 반환값: 생성된 노드의 주소
TreeNode * makeNode(int data, TreeNode *left, TreeNode *right)
{
TreeNode *p;
p = (TreeNode *) malloc(sizeof(TreeNode));
p->data = data;
p->left = left;
p->right = right;
return p;
}
void preorder(TreeNode *p)
{
if(p!=NULL)
{
printf("%d ",p->data);
preorder(p->left);
preorder(p->right);
}
}
void inorder(TreeNode *p)
{
if(p!=NULL)
{
inorder(p->left);
printf("%d ",p->data);
inorder(p->right);
}
}
void postorder(TreeNode *p)
{
if(p!=NULL)
{
postorder(p->left);
postorder(p->right);
printf("%d ",p->data);
}
}
int main()
{
TreeNode *n1, *n2, *n3, *n4, *n5; //직접 노드 하나씩 입력받아 넣어주었습니다.
int data;
// 정수를 하나씩 입력 받을 때마다 노드를 생성하여 트리 구성
// makeNode() 함수 이용
scanf("%d",&data);
n4 = makeNode(data,NULL,NULL);
scanf("%d",&data);
n5 = makeNode(data,NULL,NULL);
scanf("%d",&data);
n2 = makeNode(data,n4,n5);
scanf("%d",&data);
n3 = makeNode(data,NULL,NULL);
scanf("%d",&data);
n1 = makeNode(data,n2,n3);
// preorder
preorder(n1);
printf("\n");
// inorder
inorder(n1);
printf("\n");
// postorder
postorder(n1);
printf("\n");
}
반응형
'혼자 공부하는 것들 > 자료구조(c언어)' 카테고리의 다른 글
C)주어진 파일 문서에 포함된 각 단어별 빈도 수를 출력하는 프로그램 작성(이진트리 사용) (0) | 2020.07.18 |
---|---|
C)원형 큐(queue)에 자료 삽입 및 삭제 (0) | 2020.07.18 |
C)복소수를 구조체로 표현해보기, 복소수 덧셈 계산 (0) | 2020.07.17 |
C)Link List 구현 (0) | 2020.07.17 |
C) 피보나치 수열 계산하기 (0) | 2020.07.17 |
댓글