#include <iostream>
using namespace std;
#define SAFE_DELETE(x) if(x != nullptr) delete x;
// 트리 구조체
typedef struct s_tree_node
{
char data;
s_tree_node* p_left; // 왼쪽 노드에 대한 포인터
s_tree_node* p_right; // 오른쪽 노드에 대한 포인터
public:
// 전위 순회 함수
static void Pre_order(s_tree_node* _p_root_node)
{
if (_p_root_node)
{
printf("%3c", _p_root_node->data);
Pre_order(_p_root_node->p_left);
Pre_order(_p_root_node->p_right);
}
}
// 중위 순회 함수
static void In_order(s_tree_node* _p_root_node)
{
if (_p_root_node)
{
In_order(_p_root_node->p_left);
printf("%3c", _p_root_node->data);
In_order(_p_root_node->p_right);
}
}
// 후위 순회 함수
static void Post_order(s_tree_node* _p_root_node)
{
if (_p_root_node)
{
Post_order(_p_root_node->p_left);
Post_order(_p_root_node->p_right);
printf("%3c", _p_root_node->data);
}
}
public:
// 트리 객체 초기화
s_tree_node(char _data, s_tree_node* _p_left_node, s_tree_node* _p_right_node)
{
this->data = _data; // data 초기화
this->p_left = _p_left_node; // 왼쪽 링크 초기화
this->p_right = _p_right_node; // 오른쪽 링크 초기화
}
~s_tree_node()
{
}
};
// 트 리 구 조
// -
// * /
// A B C D
int main() {
// ( A * B - C / D ) 수식 이진 트리 생성
s_tree_node* n7 = new s_tree_node('D', NULL, NULL);
s_tree_node* n6 = new s_tree_node('C', NULL, NULL);
s_tree_node* n5 = new s_tree_node('B', NULL, NULL);
s_tree_node* n4 = new s_tree_node('A', NULL, NULL);
s_tree_node* n3 = new s_tree_node('/', n6, n7);
s_tree_node* n2 = new s_tree_node('*', n4, n5);
s_tree_node* rootNode = new s_tree_node('-', n2, n3);
cout << "\n 전위 순회로 구현 : ";
s_tree_node::Pre_order(rootNode);
cout << "\n 중위 순회로 구현 : ";
s_tree_node::In_order(rootNode);
cout << "\n 후위 순회로 구현 : ";
s_tree_node::Post_order(rootNode);
SAFE_DELETE(n7);
SAFE_DELETE(n6);
SAFE_DELETE(n5);
SAFE_DELETE(n4);
SAFE_DELETE(n3);
SAFE_DELETE(n2);
SAFE_DELETE(rootNode);
}
'CS > 자료구조 & 알고리즘' 카테고리의 다른 글
세그먼트 트리 (Segment Tree) (0) | 2022.06.16 |
---|---|
이터레이터 Iterator (반복자) (0) | 2022.06.16 |
깊이 우선 탐색 BFS / 너비 우선 탐색 BFS 개념 (0) | 2022.06.14 |
해시 테이블 (0) | 2022.06.12 |
레드-블랙 트리(Red-Black Tree) (0) | 2022.06.12 |