wei xin_44706101 2019-11-25 23:16 采纳率: 100%
浏览 332
已采纳

二叉树问题非递归中序遍历

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);
}
  • 写回答

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);
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 爬取豆瓣电影相关处理
  • ¥15 手机淘宝抓清除消息接口
  • ¥15 C#无selenium
  • ¥15 LD衰减计算的结果过大
  • ¥15 用机器学习方法帮助保险公司预测哪些是欺诈行为
  • ¥15 计算300m以内的LD衰减
  • ¥15 数据爬取,python
  • ¥15 怎么看 cst中一个面的功率分布图,请说明详细步骤。类似下图
  • ¥15 为什么我的pycharm无法用pyqt6的QtWebEngine
  • ¥15 FOR循环语句显示查询超过300S错误怎么办