[c++] 이진트리 정렬

이진 트리 정렬(Binary Tree Sort)은 이진 트리를 사용하여 데이터를 정렬하는 알고리즘입니다.

이진 트리(Binary Tree)

이진 트리는 각 노드가 최대 두 개의 자식 노드를 가지는 트리 구조를 말합니다. 일반적으로 이진 트리에는 부모 노드, 왼쪽 자식 노드, 오른쪽 자식 노드의 연결이 존재합니다.

class Node {
  public:
    int value;
    Node* left;
    Node* right;
};

이진 트리 정렬 알고리즘

  1. 먼저 주어진 데이터를 바탕으로 이진 트리를 구성합니다.
  2. 다음으로 트리를 중위 순회(Inorder Traversal)하여 정렬된 결과를 얻습니다.
  3. 중위 순회를 통해 얻은 정렬된 데이터를 반환합니다.

예시 코드

다음은 C++에서 이진 트리 정렬을 구현한 간단한 예시 코드입니다.

#include <iostream>
using namespace std;

class Node {
  public:
    int value;
    Node* left;
    Node* right;
};

class BinaryTreeSort {
  public:
    Node* root;

    void insert(Node*& node, int value) {
        if (node == nullptr) {
            node = new Node;
            node->value = value;
            node->left = nullptr;
            node->right = nullptr;
        } else {
            if (value < node->value) {
                insert(node->left, value);
            } else {
                insert(node->right, value);
            }
        }
    }

    void inorderTraversal(Node* node) {
        if (node != nullptr) {
            inorderTraversal(node->left);
            cout << node->value << " ";
            inorderTraversal(node->right);
        }
    }
};

int main() {
    int values[] = {5, 3, 8, 1, 4, 7, 9};
    BinaryTreeSort treeSort;
    for (int value : values) {
        treeSort.insert(treeSort.root, value);
    }
    treeSort.inorderTraversal(treeSort.root);
    return 0;
}

위 예시 코드는 이진 트리를 사용하여 주어진 데이터를 정렬한 후, 중위 순회를 통해 정렬된 결과를 출력합니다.

참고 자료

이진 트리: https://en.wikipedia.org/wiki/Binary_tree
중위 순회: https://en.wikipedia.org/wiki/Tree_traversal#In-order_(LNR)