직대딩 블로그

이진트리 (binary tree) 본문

알고리즘/알고리즘 기법 정리

이진트리 (binary tree)

Jae Yeon 2023. 3. 12. 18:01

구조체 사용

#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