jqtree 2021-05-17 15:23 采纳率: 80%
浏览 45
已采纳

数据结构 代码没有报错 但输出结果不对

输出的中序非递归遍历不对 

#include<stdio.h>
#include<stdlib.h>
#define TElemType char
#define ERROR 0;
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#define OK 1
#define Status int
//二叉链表存储表示 
typedef struct BiTNode{
	TElemType data;
	struct BiTNode *lchild,*rchild;//左右孩子指针 
}BiTNode, *BiTree;
#define SElemType BiTree //栈的数据类型 
//定义栈 
typedef struct {
SElemType *base;
SElemType *top;
int stacksize;
}SqStack;

//构造空栈
int initstack (SqStack &s){
s.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
if(!s.base)
exit(0);
s.top=s.base;
s.stacksize=STACK_INIT_SIZE;
return 0;}
//判断是否为空
Status StackEmpty(SqStack S){
    if(S.top==S.base) return 1;
    return 0;}
//先序遍历创建二叉树 
BiTree creatbitree(BiTree &T){
	TElemType ch;
	scanf("%c",&ch);
	if(ch=='#') T=NULL;//#代表空格字符 
	else{
		T=(BiTNode*)malloc(sizeof(BiTNode));
		T->data=ch;//生成根结点 
		creatbitree(T->lchild);//生成左子树 
		creatbitree(T->rchild);//生成右子树 
	}
	return T; 	}
//入栈 
Status push(SqStack &s, SElemType e) {
if((s.top-s.base)>=s.stacksize){
s.base=(SElemType*)realloc(s.base,(s.stacksize+STACKINCREMENT)*sizeof(int));
		  if(!(s.base))
		 exit(1);
		s.top=s.base+s.stacksize;
		s.stacksize+=STACKINCREMENT;
	   }
	   *s.top++=e;
	   return 0; }
//出栈 
Status pop(SqStack &s,SElemType &e){
	  if(s.top==s.base)
	  return 0;
	  e=*--s.top;
	  return OK;}
//中序非递归遍历的
Status inorder(BiTree T,Status (*visit)(TElemType e)){
	SqStack s;
	initstack(s);
	BiTree p=T;
	while(p||!StackEmpty(s)){
	if(p){
		push(s,p); //根指针进栈 
		p=p->lchild;}//遍历左子树 
	else{
		pop(s,p);//根指针出栈,访问根结点 
		if(!visit(p->data)) return 0;
		p=p->rchild;}//遍历右子树 
		}
return OK;} 
Status PrintElement(TElemType e){
    printf("%c",e);                             
    return 0;}
int main(){
	BiTree T;
	printf("请按照先序遍历输入二叉树(#代表空子树):\n");
	creatbitree(T);
	printf("二叉树创建成功!\n"); 
	printf("\n中序非递归遍历:\n");
	inorder(T,PrintElement);
	return 0;}

 

  • 写回答

2条回答 默认 最新

  • 代码乌龟 2021-05-18 14:34
    关注

    if(!visit(p->data)) return 0;

    把!去掉,不然打印一次就return 0 退出函数了

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 R语言Rstudio突然无法启动
  • ¥15 关于#matlab#的问题:提取2个图像的变量作为另外一个图像像元的移动量,计算新的位置创建新的图像并提取第二个图像的变量到新的图像
  • ¥15 改算法,照着压缩包里边,参考其他代码封装的格式 写到main函数里
  • ¥15 用windows做服务的同志有吗
  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值