最適な二分探索木の事前順トラバーサルを .txt ファイルに再帰的に書き込みます。コードは次のとおりです。
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.write("-\n",2);
}
}
この出力は、最大 7 ~ 10 のような小さなツリーで機能します。それを超えると、悪いキャラクターがいくつか出てきて、それらがどこから来たのかを見つけることができないようです.
F
A
-
C
B
-
-
E
D
Ì-
Ì-
-
K
I
H
G
Ì-
Ì-
-
J
-
-
M
L
-
-
O
N
Ì-
Ì-
-
私が得ている出力の例です。そのコードの「Ì」文字が何であるかはわかりません。
const int n = 15;
char A[n] = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O'};
int P[n] = {150, 25, 50, 25, 50, 125, 25, 75, 75, 50, 150, 75, 50, 25, 50};
int S[n+1][n+1] = {};
int Rt[n+1][n+1] = {};
これらはすべて私の初期配列です。(上記)
PrintTree(0, n, 0);
print tree への最初の呼び出しです。S[][] は、コメントでリンクしたファイルの配列です...数字です。Rt[][] には、A[n] に対応する数値が含まれます。したがって、Rt[i][j] = 1; 'B' である A[1] にマップされます。
配列自体は範囲外にアクセスされているわけではなく、「スペース」が 4 以上になった場合にのみ発生するため、再帰の深さは 4 レベルになります。