如下是我的代码
#include <iostream>
using std::cin;
using std::cout;
struct Node
{
int left , right;
};
const int MAXN = 30;
int n;
Node tree[MAXN];
int a[MAXN],b[MAXN],c[MAXN];
void pre_tree_walk(int ch)
{
cout << char(ch);
if (tree[ch].left != 0)
pre_tree_walk( tree[ch].left );
if (tree[ch].right != 0)
pre_tree_walk( tree[ch].right );
return;
}
int main()
{
cin>>n;
for (int i=1;i<=n;i++)
{
std::string s;
cin>>s;
a[i]=s[0] , b[i]=s[1] , c[i]=s[2];
if (b[i] != '*')
tree[ a[i] ].left = b[i];
if (c[i] != '*')
tree[ a[i] ].right = c[i];
}
pre_tree_walk(a[1]);
return 0;
}
有个很明显且致命的错误:数组越界. 在38与40行上,a[i] 所保存的应该是小写字母的ASCII码值,然而,tree的下标不应该超过29,可是小写字母的ASCII码值一般大于29 然而,让人惊讶的是,我却AC了.
并且,当把第13行改为 Node tree[3],我依然ac了,请问这是为什么?