[c++] 이진 탐색 트리(Binary Search Tree) 데이터 구조

이진 탐색 트리는 데이터를 저장하고 탐색하는 데 사용되는 자료구조이다. 이진 탐색 트리는 각 노드가 최대 두 개의 자식 노드를 가지며 다음을 만족하는 트리이다.

  1. 모든 왼쪽 자식 노드의 값은 해당 노드의 값보다 작다.
  2. 모든 오른쪽 자식 노드의 값은 해당 노드의 값보다 크다.

이진 탐색 트리의 특징

이진 탐색 트리의 구현

#include <iostream>

class Node {
public:
    int key;
    Node* left;
    Node* right;

    Node(int value) {
        key = value;
        left = nullptr;
        right = nullptr;
    }
};

class BST {
private:
    Node* root;

public:
    BST() {
        root = nullptr;
    }

    void insert(int key) {
        root = insertRecursive(root, key);
    }

    Node* insertRecursive(Node* currentNode, int key) {
        if (currentNode == nullptr) {
            return new Node(key);
        }

        if (key < currentNode->key) {
            currentNode->left = insertRecursive(currentNode->left, key);
        } else if (key > currentNode->key) {
            currentNode->right = insertRecursive(currentNode->right, key);
        }

        return currentNode;
    }

    Node* search(int key) {
        return searchRecursive(root, key);
    }

    Node* searchRecursive(Node* currentNode, int key) {
        if (currentNode == nullptr || currentNode->key == key) {
            return currentNode;
        }

        if (key < currentNode->key) {
            return searchRecursive(currentNode->left, key);
        }

        return searchRecursive(currentNode->right, key);
    }
};

이진 탐색 트리의 활용

이진 탐색 트리는 자료의 삽입, 삭제 및 탐색에 효율적으로 사용될 수 있다. 또한 정렬된 자료의 유지 및 검색에도 유용하게 사용될 수 있다.

참고 자료