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);
}
二叉树问题非递归中序遍历
- 写回答
- 好问题 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); }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥30 这是哪个作者做的宝宝起名网站
- ¥60 版本过低apk如何修改可以兼容新的安卓系统
- ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
- ¥50 有数据,怎么建立模型求影响全要素生产率的因素
- ¥50 有数据,怎么用matlab求全要素生产率
- ¥15 TI的insta-spin例程
- ¥15 完成下列问题完成下列问题
- ¥15 C#算法问题, 不知道怎么处理这个数据的转换
- ¥15 YoloV5 第三方库的版本对照问题
- ¥15 请完成下列相关问题!