想要非递归中序遍历一棵二叉树,这段代码为什么会出现读取的访问冲突?

//这是遍历处理的树的格式
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)

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^