일지

알고리즘...47

niamdank 2021. 9. 5. 11:14

이진 검색 트리 출력 함수 제작

차근차근 단계를 밟아 만들어 가기 위해 루트 노드와 두 개의 자식이 있다고 가정한 상태로 진행한다.

 

BinarySearchTree.cpp

/// <summary>
/// 이진 검색 트리를 출력한다.
/// </summary>
void BinarySearchTree::PrintBinarySearchTree()
{
	if (_root == nullptr)
	{
		std::cout << "EMPTY\n";
		return;
	}

	BinarySearchNode* node{ _root };
	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';
	}

	std::cout << "┌";
	for (int i = 1; i < center; i++)
	{
		std::cout << "─";
	}
	std::cout << "┴";
	for (int i = 1; i < center; i++)
	{
		std::cout << "─";
	}
	std::cout << "┐";

	if (isNeedReturn)
	{
		std::cout << '\n';
	}

	std::cout << "\n\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
┌─┴─┐


  10
┌─┴─┐
5   20