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%確信しています。基本的に、これらのダッシュを存在しない子に正しくフォーマットするにはどうすればよいですか。