0

我正在尝试对 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% 确定递归调用之间的行要么是错误的,要么甚至不应该存在。基本上,我如何正确地将这些破折号格式化为不存在的孩子。

4

1 回答 1

0

我只是回答了我自己的问题。

应该:

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);
     PrintTree(Rt[i][j] + 1, j, space);
}
else
{
    outfile.write("",space);  //This line
     outfile<<"-"<<endl;      
}
}

这适用于小树......但现在我得到了奇怪的字符。

Ì ...我不知道这是从哪里来的,因为它不会在输入小于 10 时发生。

于 2013-07-15T00:38:01.040 回答