我正在尝试对 OBST 进行预订遍历并以文件格式打印出来。我正在正确计算 OBST 的成本和根矩阵。我也可以以正确的格式输出树节点,但我无法弄清楚如何显示没有孩子的父节点。
根矩阵的哪一部分表示一个节点没有孩子或只有一个孩子?我了解如何遍历它,并正确输出节点,而不是没有孩子的节点。
例如:元素是 {A, B, C, D},概率为 {10, 20, 40, 30}。
我计算成本矩阵和根矩阵,然后使用根矩阵输出一棵树。它应该如下所示:
C
B
A
_
_
_
D
_
_
我的看起来像这样:
C
B
A
_
_
_
D
_
这是我的预订功能:
void PrintTree(int i, int j, int space)
{
if(i < j)
{
outfile.write("", space++);
outfile<<A[Rt[i][j]]<<endl;
PrintTree(i, Rt[i][j], space);
outfile.write("",space); //This line
outfile<<"-"<<endl; //This line
PrintTree(Rt[i][j] + 1, j, space);
}
}
我几乎 100% 确定递归调用之间的行要么是错误的,要么甚至不应该存在。基本上,我如何正确地将这些破折号格式化为不存在的孩子。