*이 포스트에서 문제의 답안은 C언어로 구성했습니다.
백준 사이트 프로그래밍 문제 c언어 답안
#include <stdio.h>
#include <stdlib.h>
typedef int BTData;
typedef struct _bTreeNode
{
BTData data;
struct _bTreeNode * left;
struct _bTreeNode * right;
} BTreeNode;
typedef void VisitFuncPtr(BTData data);
BTreeNode * MakeBTreeNode(BTData data)
{
BTreeNode * nd = (BTreeNode*)malloc(sizeof(BTreeNode));
nd->data = data;
nd->left = NULL;
nd->right = NULL;
return nd;
}
void PostorderTraverse(BTreeNode * bt)
{
if (bt == NULL)
return;
PostorderTraverse(bt->left);
PostorderTraverse(bt->right);
printf("%d\n", bt->data);
}
BTreeNode * AssignTree(BTreeNode * bt, BTData data) {
if (bt == NULL){
bt = MakeBTreeNode(data);
return bt;
}
else if (data < bt->data)
{
bt->left=AssignTree(bt->left, data);
}
else if (data > bt->data)
{
bt->right=AssignTree(bt->right, data);
}
return bt;
}
int main(void)
{
int u;
BTreeNode * bt = NULL;
while (scanf("%d", &u) !=EOF)
{
bt = AssignTree(bt, u);
}
PostorderTraverse(bt);
}
해설
이진 트리 함수는 필자가 배운 책에 있는 것을 썼습니다. 기본적으로 간단한 이진 트리 함수를 짜고 재귀함수를 이용한 새로운 함수를 만들어서 문제를 해결하면 됩니다. 이 문제의 포인트는 입력의 횟수가 정해져있지 않다는 것인데, 이것은 'while (scanf("%d", &u) !=EOF)'으로 해결합니다. 이 !=EOF란 조건은 입력이 받는 것까지 전부 읽어낸다는 것으로 비주얼 스튜디오 같은 걸로 실행했을 때 결과를 볼 수는 없지만 백준 사이트에서 제출했을 때는 제대로 작동합니다.
728x90
'공부 > 프로그래밍' 카테고리의 다른 글
[C언어] 백준 1991번 트리 순회 (2) | 2019.07.22 |
---|---|
[C언어] 백준 1158번 조세퍼스 문제 (0) | 2019.07.20 |
[C언어] 반복문 printf 출력에서 마지막엔 \n(줄바꿈) 안하게 하기 (0) | 2019.06.24 |
C++ .size() 써보기 (0) | 2019.05.28 |
C++ 이자율을 통한 미래 금액 계산하기 (0) | 2019.05.28 |