我試圖在控制檯中顯示BST。這是我的代碼(這是代碼的修改版本在這裏找到:Printing Level Order Binary Search Tree Formatting):如何在控制檯中正確顯示二叉搜索樹?
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;
}
}
例如結果應該是這樣的:
4
1 6
- 2 5 -
- - - 3 - - - -
但取而代之的則是:
4
1 6
- 2 5 -
- - 3 - - -
如果我沒有正確的放置,當程序將它放到空葉子時,遞歸會停止,因此在結果中較低的層次上缺少「 - 」。但是我怎麼知道我應該在底層畫多少呢?如何使這項工作?
您還可以與其中顯示'3'的問題,它應該是2'的'權。 – 2013-04-06 17:04:50
@MatthieuM。這實際上與主要問題有關。如果樹顯示正確,那麼'3'就會在它的位置上。在數據結構的手段中,它是'2'的一個正確的孩子。 – 2013-04-06 17:13:16