typedef struct bnode
{char data;
struct bnode *lchild;
struct bnode *rchild;
int top;
}bnode;
bnode stack[100];
void initstack(bnode * stack)
{
stack->top=-1;}
void push(bnode*stack,bnode*p)
{ if(p)
{stack->top++;
stack[stack->top].data=p->data;
}}
void pop(bnode*stack)
{
stack->top--;}
int stackempty(bnode*stack)
{ if (stack->top==-1)
return 0;
return 1;
}
bnode * top(bnode*stack)
{ bnode* t=&stack[stack->top];
return t;}
void stackmidread(bnode*root)
{ bnode*p=root;
initstack(stack);
while(p || stackempty(stack)==1)
{ while(p)
{push(stack,p);
p=p->lchild;
}
if (stackempty(stack)==1)
{ p=top(stack);
printf("%c", p->data);
pop(stack);
p=p->rchild;
}}
跪求大佬解答 为什么中序遍历ABD###CE##FG###
只显示DBA
bnode * createtree()
{ char ch;
bnode*p;
ch=getchar();
if (ch=='#')
p=NULL;
else{ p=(bnode*)malloc(sizeof(bnode));
p->data=ch;
p->lchild=createtree();
p->rchild=createtree();}
return p;
}
```void main ()
{ bnode *root=createtree();
stackmidread(root);
}
![](https://profile-avatar.csdnimg.cn/011571254d724f71a10c71bd6c75a02f_weixin_44764457.jpg!4)
二叉树问题非递归中序遍历
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
- ysuwood 2019-11-26 22:57关注
push中少了一句:
stack[stack->top].rchild=p->rchild;//增加
详见下面代码:#include <stdio.h> #include <stdlib.h> typedef struct bnode { char data; struct bnode *lchild; struct bnode *rchild; int top; }bnode; bnode stack[100]; void initstack(bnode * stack) { stack->top=-1; } void push(bnode*stack,bnode*p) { if(p) { stack->top++; stack[stack->top].data=p->data; stack[stack->top].rchild=p->rchild;//增加 } } void pop(bnode*stack) { stack->top--; } int stackempty(bnode*stack) { if (stack->top==-1) return 0; return 1; } bnode * top(bnode*stack) { bnode* t=&stack[stack->top]; return t; } void stackmidread(bnode*root) { bnode*p=root; initstack(stack); while(p || stackempty(stack)==1) { while(p) { push(stack,p); p=p->lchild; } if (stackempty(stack)==1) { p=top(stack); printf("%c", p->data); pop(stack); p=p->rchild; } } } bnode * createtree() { char ch; bnode *p; ch=getchar(); if (ch=='#') p=NULL; else { p=(bnode*)malloc(sizeof(bnode)); p->data=ch; p->lchild=createtree(); p->rchild=createtree(); } return p; } void main() { bnode *root=createtree(); stackmidread(root); }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 metadata提取的PDF元数据,如何转换为一个Excel
- ¥15 关于arduino编程toCharArray()函数的使用
- ¥100 vc++混合CEF采用CLR方式编译报错
- ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
- ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
- ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
- ¥50 如何openEuler 22.03上安装配置drbd
- ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
- ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
- ¥15 Windows11, backspace, enter, space键失灵