以递归方式将最优二叉搜索树的前序遍历写入 .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);
是我最初调用打印树。S[][] 是我在评论中链接的文件中的数组......它是数字。Rt[][] 包含对应于 A[n] 的数字。所以,Rt[i][j] = 1;映射到 A[1],即“B”。
数组本身不会被越界访问,并且仅在“空间”变为 4 或更大时才会发生,因此递归深度为 4 级。