问题遇到的现象和发生背景
C语言遍历二叉树的时候,出现了读取访问权限的问题,要怎么解
#include <stdio.h>
#include <malloc.h>
#define MaxLength 100
#define MaxSize 50
typedef char ElemType;
typedef struct BTNode
{
ElemType data;
struct BTNode* lchild;
struct BTNode* rchild;
}BTreeNode;
typedef struct
{
BTreeNode* node[MaxSize];
int top;
}SqStack;
void StackInit(SqStack** s)
{
(*s) = (SqStack*)malloc(sizeof(SqStack));
(*s)->top = -1;
}
void StackDestroy(SqStack** s)
{
free(*s);
}
void BTreeInit(BTreeNode** b)
{
(*b) = (BTreeNode*)malloc(sizeof(BTreeNode));
(*b)->lchild = NULL;
(*b)->rchild = NULL;
}
void BTreeCreat(BTreeNode** b)
{
BTreeNode* t;
ElemType e;
ElemType elems[MaxLength];
SqStack* s;
int k;
int i;
t = NULL;
i = 0;
StackInit(&s);
printf("elems input:");
gets_s(elems,100);
e = elems[i];
while (e != '\0')
{
switch (e)
{
case '(':
s->top++;
s->node[s->top] = t;
k = 1;
break;
case ')':
s->top--;
break;
case ',':
k = 2;
break;
default:
BTreeInit(&t);
t->data = e;
if (i == 0)
{
(*b) = t;
}
else
{
switch (k)
{
case 1:
s->node[s->top]->lchild = t;
break;
case 2:
s->node[s->top]->rchild = t;
break;
}
}
}
i++;
e = elems[i];
}
StackDestroy(&s);
}
void PreOrderTraverse(BTreeNode* b){
if (b == NULL)
return;
printf("%c ", b->data);
PreOrderTraverse(b->lchild);
PreOrderTraverse(b->rchild);
}
void InOrderTraverse(BTreeNode* b)
{
if (b == NULL)
return;
InOrderTraverse(b->lchild);
printf("%c ", b->data);
InOrderTraverse(b->rchild);
}
void PostOrderTraverse(BTreeNode* b)
{
if (b == NULL)
return;
PostOrderTraverse(b->lchild);
PostOrderTraverse(b->rchild);
printf("%c ", b->data);
}
void BTreeDestroy(BTreeNode** b)
{
free(*b);
}
int main()
{
BTreeNode* b;
BTreeInit(&b);
BTreeCreat(&b);
PostOrderTraverse(&b);
printf("\n");
BTreeDestroy(&b);
return 0;
}