각 노드가 최대 2개의까지의 자식노드를 가진 트리
트리지만, 1차원 배열로 표현할 수 있다는 특징이 있다

#include <iostream>
#define SIZE
// 이진 트리
using namespace std;
struct Node
{
int data;
Node* left;
Node* right;
};

// 노드 생성
Node* CreateNode(int data, Node* left, Node* right)
{
Node* newNode = new Node();
newNode->data = data;
newNode->left = left;
newNode->right = right;
return newNode;
}


// 전위 순회
void PreOrder(Node* root)
{
if (root != nullptr)
{
// 데이터를 먼저 출력하고 이동
cout << root->data << " ";
PreOrder(root->left);
PreOrder(root->right);
}
}
출력값: 1 2 4 5 3 6 7
- 왼쪽 노드부터 root를 거쳐 오른쪽 노드로 이동한다
- 이진 탐색 트리(Binary Search Tree)에서는 노드의 값이 무조건 left < root < right 순서이다
- 중위순회 방식을 통해 오름차순으로 나오게 된다

// 중위 순회
void InOrder(Node* root)
{
if (root != nullptr)
{
InOrder(root->left);
cout << root->data << " ";
InOrder(root->right);
}
}
출력값: 4 2 5 1 6 3 7

// 후위 순회
void PostOrder(Node* root)
{
// root 가 nullptr이 아니면 왼쪽부터 감
// root가 nullptr이면 함수 종료 & 전으로 돌아가서 오른쪽 탐색
if (root != nullptr)
{
PostOrder(root->left);
PostOrder(root->right);
// 다 이동한 뒤 데이터 출력
cout << root->data << " ";
}
}
int main()
{
Node* node7 = CreateNode(7, nullptr, nullptr);
Node* node6 = CreateNode(6, nullptr, nullptr);
Node* node5 = CreateNode(5, nullptr, nullptr);
Node* node4 = CreateNode(4, nullptr, nullptr);
Node* node3 = CreateNode(3, node6, node7);
Node* node2 = CreateNode(2, node4, node5);
Node* node1 = CreateNode(1, node2, node3);
PostOrder(node1);
cout << endl;
PreOrder(node1);
cout << endl;
InOrder(node1);
return 0;
}