-
노드의 크기에 따른 출력 함수 제작
노드의 크기가 주어지고 데이터가 주어질 때 가운데 정렬이 된 상태의 스트링을 반환하는 함수를 만든다.
가령 노드의 크기가 5이고 노드의 값이 1이라고 하면 가운데 정렬을 위한 공백의 개수는 다음과 같다.
공백의 개수 = (노드의 크기 - 노드의 값의 길이) / 2
이때, 나눠지는 값이 홀수 인 경우 글자를 오른쪽에 치우쳐서 출력하기 위해 우측 공백을 추가로 준다고 하면, 왼쪽과 오른 른쪽 공백은 다음과 같이 구할 수 있다.
왼쪽 공백의 개수 = 공백의 개수
오른쪽 공백의 개수 = 공백의 개수 + (노드의 크기 - 노드의 값의 길이) % 2
정확한 공백을 확인하기 위해 ' ' 대신 '_'를 사용해 구현해 보면 다음과 같다.
BinarySearchTree.h
/// <summary> /// 이진 검색 트리에 사용할 노드 /// </summary> struct BinarySearchNode { const static size_t Width = 5; // ... string ToString() { string dataStr = std::to_string(data); size_t spaceCnt = Width - dataStr.size(); size_t leftSpaceCnt = spaceCnt / 2; size_t rightSpaceCnt = spaceCnt / 2 + spaceCnt % 2; return string(leftSpaceCnt, '_') + dataStr + string(rightSpaceCnt, '_'); } // ... };
main.cpp
#include "Common.h" #include "검색트리/BinarySearchTree.h" int main() { BinarySearchNode node; node.data = 1; std::cout << node.ToString() << '\n'; node.data = 12; std::cout << node.ToString() << '\n'; node.data = 123; std::cout << node.ToString() << '\n'; node.data = 1234; std::cout << node.ToString() << '\n'; node.data = 12345; std::cout << node.ToString() << '\n'; }
실행결과
__1__ _12__ _123_ 1234_ 12345