트리 : 연결리스트를 기반으로 한 새로운 데이터 구조
트리에서의 노드들의 연결은 2차원적으로 구성 (연결리스트는 1차원)
각 노드는 일정한 층에 속하고, 다음 층의 노드들을 가리키는 포인터를 가짐
이진 검색을 수행하는데 유리하면서 유동성 유지.
//이진 검색 트리의 노드 구조체
typedef struct node
{
// 노드의 값
int number;
// 왼쪽 자식 노드
struct node *left;
// 오른쪽 자식 노드
struct node *right;
} node;
// 이진 검색 함수 (*tree는 이진 검색 트리를 가리키는 포인터)
bool search(node *tree)
{
// 트리가 비어있는 경우 ‘false’를 반환하고 함수 종료
if (tree == NULL)
{
return false;
}
// 현재 노드의 값이 50보다 크면 왼쪽 노드 검색
else if (50 < tree->number)
{
return search(tree->left);
}
// 현재 노드의 값이 50보다 작으면 오른쪽 노드 검색
else if (50 > tree->number)
{
return search(tree->right);
}
// 위 모든 조건이 만족하지 않으면 노드의 값이 50이므로 ‘true’ 반환
else {
return true;
}
}
--> 일반적으로 최대한 많은 바구니를 만드는 해시 함수를 사용하기 때문에 실행시간은 O(1)에 가까움.