在数组上发生了读取访问权限冲突,个人觉得可能是数组越界的问题,但是找不到问题出在哪里
具体代码如下,是一个根据先序序列和中序序列建立二叉树并输出层次序列的程序
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <vector>
#include <cstring>
#include <algorithm>
#define M 10000
typedef struct BiNode
{
char data;
struct BiNode* lchild, * rchild;
}BiNode, * BiTree;
typedef struct Queue
{
BiTree data[M];
int front;
int rear;
}Queue;
void InitQueue(Queue& Q)
{
Q.front = Q.rear = 0;
}
void EnQueue(Queue& Q, BiTree T)
{
if ((Q.rear + 1) % M == Q.front)
return;
Q.data[Q.rear] = T;
Q.rear = (Q.rear + 1) % M;
}
void DeQueue(Queue& Q, BiTree& T)
{
if (Q.rear == Q.front)
return;
T = Q.data[Q.front];
Q.front = (Q.front + 1) % M;
}
BiTree CreateBiTree(char pre[], char mid[], int l1, int r1, int l2, int r2)
{
if (l1 <= r1)
{
int i = 0, llen = 0, rlen = 0;
for (i = 0; mid[i] != pre[l1]; i++);
llen = i - l2;
rlen = r2 - i;
BiTree T = new BiNode;
T->data = pre[l1];
T->lchild = CreateBiTree(pre, mid, l1 + 1, l1 + llen, l2, l2 + llen - 1);
T->rchild = CreateBiTree(pre, mid, l1 + llen + 1, r1, l2 + llen + 1, r2);
}
else
return NULL;
}
void LevelTraverse(BiTree T)
{
BiTree p;
Queue Q;
InitQueue(Q);
if (T)
{
Q.data[Q.rear] = T;
Q.rear = (Q.rear + 1) % M;
while (Q.front != Q.rear)
{
p = Q.data[Q.front];
printf("%c", p->data);
Q.front = (Q.front + 1) % M;
if (p->lchild)
{
Q.data[Q.rear] = p->lchild;
Q.rear = (Q.rear + 1) % M;
}
if (p->rchild)
{
Q.data[Q.rear] = p->rchild;
Q.rear = (Q.rear + 1) % M;
}
}
}
}
int main()
{
char pre[100], mid[100];
int n, i;
printf("请输入结点数:\n");
scanf_s("%d", &n);
printf("请输入先序序列:\n");
for (i = 0; i < n; i++)
scanf_s("%c", &pre[i]);
printf("请输入中序序列:\n");
for (i = 0; i < n; i++)
scanf_s("%c", &mid[i]);
BiTree T = CreateBiTree(pre, mid, 0, n - 1, 0, n - 1);
printf("层次序列如下:\n");
LevelTraverse(T);
return 0;
}
报错内容如图
请问报错的原因,该如何修改