//这是遍历处理的树的格式
static void load_bitre(bitre & t) {
char s;
scanf("%c",&s);
t=(bitre)malloc(sizeof(bnode));
if (s=='.'){
t=0;
}
else{
t->data=s;
load_bitre(t->lchild);
load_bitre(t->rchild);
}
//这是我企图中序遍历代码
static void displayWith(bitre & root){
bitre stack[100];//栈访问指针
int flag=-1;//递归调用语句编号
bitre oil=root;
stack[++flag]=oil;
while (flag!=-1)
{
while (oil){
stack[++flag]=oil->lchild;//这后面就是先序
oil=oil->lchild;
}
oil=stack[--flag];/*事实上我觉得在这加printf中序遍历逻辑上很合理,输出也确实是中序,但是会有报警,这就是我遇到的问题*/
if(oil)
printf("%c",oil->data);
if(flag!=-1){
stack[flag]=oil->rchild;//在这后面加printf就是后序
oil=stack[flag];
}
}
}
oil 为真时,不能保证oil->lchild也为真,stack中是由空指针的,调用空指针oil->data自然会出错
while (oil)改为while (oil&&oil->lchild)
不知道你这个问题是否已经解决, 如果还没有解决的话: