【前缀码判定c++程序】求帮助,测试用例出现无效内存引用,不知道问题出在哪里
#include<iostream>#include<cstdio>
#include<malloc.h>
#include<string.h>
//构建哈夫曼树来判定是否有重复的二叉树路径
typedef struct BiTCode{ // 结点结构
int flag;
struct BiTCode *Left, *Right; // 左右孩子指针
}BiTCode;
int main()
{
int n;
scanf("%d",&n);
BiTCode *Root;
Root=(BiTCode *)malloc(sizeof(BiTCode));
Root->flag = 0;
Root->Left = NULL;
Root->Right = NULL;
for(int i=0;i<n;i++) // iiiii,循环读取n个字符串
{
char str[1000]="";
scanf("%s",&str);
int len;
len=strlen(str);
BiTCode *p;
p= Root;
for(int j=0;j<len;j++) // jjjjj,读取当前字符串的每一位
{
if(str[j]=='0')
{
if( (p->Left)==NULL )
{
p->Left =(BiTCode *)malloc(sizeof(BiTCode));
p = p->Left;
p->Left = NULL;
p->Right = NULL;
if (j == len - 1)
{ //读到最后一个字符
p->flag = 1;//将在此停止的放置标记为1
}
else
{ //将路上遍历过的节点都设置成为0
p->flag = 0;
}
}else
{
if( (j==len-1)||(p->Left->flag) )//当前读取的字符串的最后一位或者有字符串在这里结束
{
printf("%s\n",str);
return 0;
}else
{
p=p->Left;
}
}
}
//右边
if(str[j]=='1')
{
if( (p->Right)==NULL )
{
p->Right =(BiTCode *)malloc(sizeof(BiTCode));
p = p->Right;
p->Left = NULL;
p->Right = NULL;
if (j == len - 1)
{ //读到最后一个字符
p->flag = 1;//将在此停止的放置标记为1
}
else
{ //将路上遍历过的节点都设置成为0
p->flag = 0;
}
}else
{
if( (j==len-1)||(p->Right->flag) )//当前读取的字符串的最后一位或者有字符串在这里结束
{
printf("%s\n",str);
return 0;
}else
{
p=p->Right;
}
}
}
}
}
printf("YES\n");
return 0;
}