일지
알고리즘...48
niamdank
2021. 9. 6. 00:59
이진 검색 트리 출력 함수 제작
깊이가 2 인 경우의 출력 완료
BinarySearchTree.cpp
/// <summary>
/// 이진 검색 트리를 출력한다.
/// </summary>
void BinarySearchTree::PrintBinarySearchTree()
{
if (_root == nullptr)
{
std::cout << "EMPTY\n";
return;
}
_queue.push(_root);
while (!_queue.empty())
{
BinarySearchNode* node{ _queue.front() };
_queue.pop();
PrintBinarySearchTree(node);
if (node->left != nullptr)
{
_queue.push(node->left);
}
if (node->right != nullptr)
{
_queue.push(node->right);
}
}
std::cout << "\n\n";
}
/// <summary>
/// 이진 검색 트리를 출력한다.
/// </summary>
/// <param name="node">현재 출력할 노드</param>
void BinarySearchTree::PrintBinarySearchTree(BinarySearchNode* node)
{
int depth{ node->GetMaxDepth() };
int center{ (depth - 1) * 5 / 2 };
bool isNeedReturn{ ((node == _root) || IsRightNode(node) && IsRightNode(node->parent)) };
for (int i = 0; i < center; i++)
{
std::cout << ' ';
}
std::cout << node->data;
for (int i = 0; i < center; i++)
{
std::cout << ' ';
}
if (isNeedReturn)
{
std::cout << '\n';
}
if (node->HasLeftChild())
{
std::cout << "┌";
for (int i = 1; i < center; i++)
{
std::cout << "─";
}
}
else
{
for (int i = 0; i < center; i++)
{
std::cout << ' ';
}
}
if (node->HasLeftChild() || node->HasRightChild())
{
std::cout << "┴";
}
if (node->HasRightChild())
{
for (int i = 1; i < center; i++)
{
std::cout << "─";
}
std::cout << "┐";
}
else
{
for (int i = 0; i < center + 3; i++)
{
std::cout << ' ';
}
}
if (isNeedReturn)
{
std::cout << '\n';
}
}
main.cpp
#include "Common.h"
#include "검색트리/BinarySearchTree.h"
int main()
{
int n = 3;
int* arr;
// 동작 테스트를 위한 값
//arr = new int[n]{ 2, 4, 6, 8, 10, 9, 7, 5, 3, 1 };
arr = new int[3]{ 10, 5, 20 };
BinarySearchTree tree;
for (int i = 0; i < n; i++)
{
tree.Insert(arr[i]);
}
tree.PrintBinarySearchTree();
//tree.Delete(5);
//tree.PrintBinarySearchTree();
// 출력하고 싶은 모양
std::cout << " 10\n";
std::cout << "┌─┴─┐\n";
std::cout << "5 20\n";
delete[] arr;
}
실행결과
10
┌─┴─┐
5 20
10
┌─┴─┐
5 20