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); }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 mysql sum函数优化
- ¥15 求高通平台Softsim调试经验
- ¥15 canal如何实现将mysql多张表(月表)采集入库到目标表中(一张表)?
- ¥15 wpf ScrollViewer实现冻结左侧宽度w范围内的视图
- ¥15 栅极驱动低侧烧毁MOSFET
- ¥30 写segy数据时出错3
- ¥100 linux下qt运行QCefView demo报错
- ¥50 F1C100S下的红外解码IR_RX驱动问题
- ¥20 基于matlab的航迹融合 航迹关联 航迹插补
- ¥15 用Matlab实现图中的光线追迹