[문제1] 연결리스트를 이용한 트리 구현
- 노드번호를 받아서, 그 노드와 자식노드가 있다면 출력(없으면 미출력)
- 없는 노드번호를 입력받는다면, -1출력
- 트리구조
입력예시 출력예시
2 | 30 70 90 |
입력예시 출력예시
3 |
50 120 |
입력예시 출력예시
9 |
-1 |
#include<stdio.h> #include<stdlib.h> struct node { int data; struct node *left; struct node *right; }; void addLeftchild(struct node *parent, int value){ struct node *newnode = (struct node*)malloc(sizeof(struct node)); newnode->data = value; newnode->left = NULL; newnode->right = NULL; parent->left = newnode; } void addRightchild(struct node *parent, int value){ struct node *newnode = (struct node*)malloc(sizeof(struct node)); newnode->data = value; newnode->left = NULL; newnode->right = NULL; parent->right = newnode; } void main(){ int number; struct node *root = (struct node*)malloc(sizeof(struct node)); struct node *F[8]; root->data = 20; root->left = NULL; root->right = NULL; addLeftchild(root, 30); addRightchild(root, 50); addLeftchild(root->left, 70); addRightchild(root->left, 90); addRightchild(root->right, 120); addLeftchild(root->right->right, 130); addRightchild(root->right->right, 80); F[0] = root; F[1] = root->left; F[2] = root->right; F[3] = root->left->left; F[4] = root->left->right; F[5] = root->right->right; F[6] = root->right->right->left; F[7] = root->right->right->right; scanf("%d", &number); for (int i = 0; i < 8; i++) { if (i == number - 1) { printf("%d", F[i]->data); if (F[i]->left != NULL) { printf(" %d", F[i]->left->data); } if (F[i]->right != NULL) { printf(" %d", F[i]->right->data); } printf("\n"); break; } if (i == 7) { printf("-1\n"); } } for (int i = 0; i < 8; i++) { free(F[i]); } } |
'알고리즘' 카테고리의 다른 글
[알고리즘] 기본 추상자료형(10) - 예제(트리ADT) (0) | 2018.12.05 |
---|---|
[알고리즘] 기본 추상자료형(9) - 예제(트리ADT) (0) | 2018.12.05 |
[알고리즘] 기본 추상자료형(7) - 설명(트리ADT, 이진트리ADT) (0) | 2018.12.05 |
[알고리즘] 기본 추상자료형(6) - 예제(큐ADT/데크ADT) (0) | 2018.11.29 |
[알고리즘] 기본 추상자료형(5) - 예제(스택ADT) (2) | 2018.11.29 |