ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 알고리즘...47
    일지 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

    댓글

Designed by Tistory.