직대딩 블로그
이진트리 (binary tree) 본문
구조체 사용
#include<stdio.h>
#include<malloc.h>
struct NODE
{
int data;
NODE *left;
NODE *right;
};
NODE *INSERT(NODE *head, int value) {
NODE *index = head;
NODE *position = NULL;
while (index != NULL) {
position = index;
if (value < index->data) index = index->left;
else if (value > index->data) index = index->right;
else return NULL;
}
NODE *newnode = (NODE *)malloc(sizeof(NODE));
if (newnode == NULL) return NULL;
newnode->data = value;
newnode->left = NULL;
newnode->right = NULL;
if (head == NULL) return newnode;
if (value < position->data) position->left = newnode;
else position->right = newnode;
return newnode;
}
void DELETE(NODE *head) {
if (head != NULL) {
if (head->left != NULL) DELETE(head->left);
if (head->right != NULL) DELETE(head->right);
free(head);
}
}
void PRINTBT(NODE *head) {
NODE *index = head;
if (index != NULL) {
if (index->left != NULL) PRINTBT(index->left);
if (index->right != NULL) PRINTBT(index->right);
printf("%d ", index->data);
}
}
NODE *SEARCH(NODE *index, int key) {
while (index != NULL) {
if (key == index->data) return index;
else if (key < index->data) index = index->left;
else index = index->right;
}
return NULL;
}
int main() {
int key;
NODE *head = NULL;
head = INSERT(NULL, 60);
INSERT(head, 50);
INSERT(head, 20);
INSERT(head, 40);
INSERT(head, 90);
INSERT(head, 80);
PRINTBT(head);
printf("\n");
printf("검색키 :");
scanf("%d", &key);
NODE *index = SEARCH(head, key);
if (index != NULL) printf("%d 찾음\n", key);
else printf("%d 못찾음\n", key);
DELETE(head);
return 0;
}
'알고리즘 > 알고리즘 기법 정리' 카테고리의 다른 글
퀵 정렬 (0) | 2023.03.12 |
---|---|
(알고리즘) 자주 사용하는 함수들 (0) | 2023.03.12 |
Suffix Array와 Index Tree (1) | 2023.03.12 |
그래프 (Graph)와 DFS/BFS (0) | 2023.03.12 |
보간 검색 ( Interpolation Search) (0) | 2023.03.12 |
Comments