이진탐색트리
2025. 3. 17. 23:46ㆍ원티드_언리얼RPG 2기/자료구조 스터디
코드:
#include <iostream>
using namespace std;
// 이진 탐색 트리의 노드 구조체
struct TreeNode
{
int key;// 노드의 값
TreeNode* left; // 왼쪽 자식을 가리키는 포인터
TreeNode* right; // 오른쪽 자식을 가리키는 포인터
TreeNode(int val) : key(val), left(nullptr), right(nullptr) {}
};
// BST 클래스 정의
class BST
{
public:
TreeNode* root;
BST() { root = nullptr; }
// 노드 삽입 함수
TreeNode* insert(TreeNode* node, int key)
{
if (node == nullptr)
{ // 빈 자리면 새로운 노드 삽입
return new TreeNode(key);
}
if (key < node->key)
{ // key가 작으면 왼쪽으로 이동
node->left = insert(node->left, key);
}
else if (key > node->key)
{ // key가 크면 오른쪽으로 이동
node->right = insert(node->right, key);
}
return node; // 부모 노드 반환 (트리 갱신)
}
void insert(int key)
{
root = insert(root, key);
}
// 중위 순회 (오름차순 정렬 출력)
void inorder(TreeNode* node)
{
if (node == nullptr) return;
inorder(node->left);
cout << node->key << " ";
inorder(node->right);
}
void printSorted()
{
inorder(root);
cout << endl;
}
};
int main() {
BST tree;
tree.insert(5);
tree.insert(3);
tree.insert(8);
tree.insert(2);
tree.insert(7);
cout << "Sorted Tree: ";
tree.printSorted(); // 정렬된 순서로 출력
return 0;
}
"동적 연결 구조(Linked Structure)" 로 이루어진 자료구조
트리는 구조체나 클래스를 선언해서 관리하는게 정신건강에 이롭다.
구조체에는 트리노드의 값, 왼쪽, 오른쪽을 가리키는 포인터로 구성되어있다.
이진탐색트리는 부모보다 작으면 왼쪽, 크면 오른쪽으로 삽입한다.
삽입하면서 트리노드가 동적으로 생성된다.
탐색 시간복잡도는 log n
중위순회 (왼쪽 →루트 → 오른쪽)
전위순회(왼쪽 → 오른쪽 → 루트)
후위순회(왼쪽 → 오른쪽 → 루트)
중요한건
중위순회(오름차순 정렬) / 후위순회(내림차순 정렬)
이진탐색트리는 map이나 set에서 key값에 접근하는데 사용함.
'원티드_언리얼RPG 2기 > 자료구조 스터디' 카테고리의 다른 글
<연결리스트> 백준 1406 에디터 (0) | 2025.03.06 |
---|---|
<배열,연결리스트> 백준 1158번 요세푸스 문제 (0) | 2025.03.04 |
2주차 배열, 벡터, 연결리스트 (0) | 2025.03.03 |
<덱deque> 백준 1021번 회전하는 큐 (0) | 2025.03.01 |
<스택> 백준 3986번 좋은 단어 (0) | 2025.03.01 |