自己写的一个代码,分配空间时出错(没出错信息)以至于没按意图执行程序
#include "stdio.h"#include "malloc.h"
#define stack_size 100
#define addsize 20
typedef struct BNode
{ char data; //二叉树中的元素类型为char类型
struct BNode *lchild;
struct BNode *rchild;
} *BiTree;
void CreatBiTree(BiTree &T) //先序创建二叉树
{ char ch;
scanf("%c",&ch);
if(ch=='$') T=NULL; //当输入'$'时表示创建的二叉树为空树
else
{ T=(BiTree)malloc(sizeof(struct BNode));
T->data=ch;
CreatBiTree(T->lchild);
CreatBiTree(T->rchild);
}
}
typedef struct {
BiTree *elem;
int top ;
int stacksize;
}stack;
int Initstack(stack&p)
{p.elem=(BiTree*)malloc(stack_size*sizeof(BiTree));
p.stacksize=stack_size;
if (!p.elem)
return 0;
p.top=0;
return 1;
}
int push(stack&p,BiTree e)
{if (p.top==p.stacksize-1)
{p.elem=(BiTree*)malloc((stack_size+addsize)*sizeof(BiTree));
if(!p.elem)
return 0;}
p.elem[p.top++]=e;
return 1;
}
BiTree pop(stack & p,BiTree e)
{if (p.top<=0)
return e=NULL;
e=p.elem[--p.top];
return e;}
BiTree gettop(stack&p,BiTree e)
{if (p.top<=0)
return e=NULL;
e=p.elem[p.top-1];
return e; }
int empty(stack&p)
{if(p.top<=0)
return 1;
return 0;}
void Preorder_N(BiTree T) //先序非递归遍历
//利用顺序栈实现二叉树的先序非递归遍历算法;顺序栈的实现参见实验二
{ stack S; //定义一个栈S,栈中元素为BiTree类型
BiTree p;
Initstack(S);
push(S,T);
p=(BiTree)malloc(sizeof(BiTree));//貌似是这里
while(!empty(S)) //当栈非空时
{
while (gettop(S,p)&&p)
{
printf("%c",p->data); push(S,p->lchild);}
pop(S, p);//空指针出栈
if(!empty(S))
{ pop(S,p); push(S,p->rchild);}
} }
void main()
{ BiTree T;
CreatBiTree(T);
Preorder_N(T);
}
当我输入:a$$
输出的却是一堆相同的乱码。
能有人告诉我为什么吗?
谢谢