我想要在控制台中显示一颗二叉搜索树。这是我的代码(这是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
的右侧。 - Matthieu M.3
将会在它的位置上。从数据结构的角度来看,它是2
的右子节点。 - raven_raven