vocal
查看原帖
vocal
693585
QWVnbGVzZWVrZXI3D楼主2024/1/14 14:33

如下是我的代码

#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了,请问这是为什么?

2024/1/14 14:33
加载中...