ABOUT ME

-

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

    댓글

Designed by Tistory.