0

OBST の事前注文トラバーサルを実行し、ファイル形式で印刷しようとしています。OBST のコストとルート マトリックスを正しく計算しています。ツリー ノードを正しい形式で出力することもできますが、子のない親を表示する方法がわかりません。

ルート行列のどの部分が、ノードに子がないか、または子が 1 つしかないことを示していますか? それをトラバースする方法と、ノードを正しく出力する方法を理解しています。子のないノードだけではありません。

例: 要素は {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 に答える