콘솔에 BST를 표시하려고합니다. 예를 들어, 결과에 대한콘솔에 바이너리 검색 트리를 올바르게 표시하는 방법은 무엇입니까?
string printLevel(node *root, int level, string gap) {
if (!root) {
return gap + "-" + gap;
}
if (level==1) {
stringstream out;
out<<root->value;
return gap + out.str() + gap;
} else if (level>1) {
string leftStr = printLevel(root->left, level-1, gap);
string rightStr = printLevel(root->right, level-1, gap);
return leftStr + " " + rightStr;
} else return "";
}
void printLevelOrder (node* root, int depth) {
for (int i=1; i<=depth; i++) {
string gap="";
for (int j=0; j<pow(2,depth-i)-1; j++) {
gap+=" ";
}
string levelNodes = printLevel(root, i, gap);
cout<<levelNodes<<endl;
}
}
는 것과 같아야합니다 : 내 코드입니다 (: Printing Level Order Binary Search Tree Formatting는 여기에서 찾을 코드의 수정 된 버전입니다)
4
1 6
- 2 5 -
- - - 3 - - - -
그러나 대신은 다음과 같습니다
4
1 6
- 2 5 -
- - 3 - - -
만약 내가 undestand 올바르게, 프로그램이 빈 잎으로 만들고 따라서 거기에 부족한 "-"결과의 하위 수준에 재귀가 중지됩니다. 그러나 내가 하위 수준에서 얼마나 많이 끌어들이는지 어떻게 알 수 있습니까? 이 작품을 만드는 방법?
, 그것은 2''의 오른쪽에 있어야한다 . –
@MatthieuM. 그것은 실제로 주요 문제에 묶여 있습니다. 트리가 올바르게 표시되면 '3'이 대신 나타납니다. 데이터 구조의 의미에서, 그것은'2'의 올바른 아이입니다. –