본문 바로가기

C/코드 리뷰

Tree 구현하기

반응형
SMALL

Tree를 구현해봤습니다. 노드의 갯수와 간선의 갯수를 받았으며, 노드의 구조체에 부모, 자식의 데이터를 int형으로 구성했습니다.

 

#include <stdio.h>

#define MAX_TREE_NODE 1000
#define MAX_CHILD_NUM 10

typedef struct _node {
	int parent;
	int child[MAX_CHILD_NUM];
}Node;

Node Tree[MAX_TREE_NODE];
int NodeNum;
int edgeNum;

void initTree() {
	for (int i = 1; i <= NodeNum; i++) {
		Tree[i].parent = -1;
		for (int j = 0; j < MAX_CHILD_NUM; j++) {
			Tree[i].child[j] = -1;
		}
	}
}

void addChild(int parent, int child) {
	int j;
	for (j = 0; j < MAX_CHILD_NUM; j++) {
		if (Tree[parent].child[j] == -1) break;
	}
	Tree[parent].child[j] = child;
	Tree[child].parent = parent;
}

int getRoot() {
	for (int i = 1; i <= NodeNum; i++) {
		if (Tree[i].parent == -1) return i;
	}
	return -1;
}

void preOrder(int root) {
	for (int i = 0; i < MAX_CHILD_NUM; i++) {
		int child = Tree[root].child[i];
		if (child != -1) {
			printf("%d ", child);
			preOrder(child);
		}
	}
}

int main(void) {
	int parent;
	int child;

	scanf("%d %d", &NodeNum, &edgeNum);

	initTree();

	for (int i = 0; i < edgeNum; i++) {
		scanf("%d %d", &parent, &child);
		addChild(parent, child);
	}

	int root = getRoot();

	preOrder(root);
}
13 12
1 2 1 3 2 4 3 5 3 6 4 7 7 12 5 9 5 8 6 11 6 10 11 13

위에는 입력값입니다.

 

Tree를 실제 문제에서 적용하기엔.... 음.... 많은 경우가 있나 싶다만은 결국 Tree라는 구조를 확장하면 Heap을 짤 수 있기에 알아두는 것이 좋은거 같습니다.


이상 Tree 구현하기였습니다. ^_^

반응형
LIST

'C > 코드 리뷰' 카테고리의 다른 글

Linked List 구현하기 (2)  (0) 2020.01.29
C언어 순열과 조합  (0) 2020.01.11
우선순위 큐 구현  (0) 2019.08.15
큐 구현 (원형 큐)  (0) 2019.08.15
스택 구현  (0) 2019.08.15