wei xin_44706101
2019-11-25 23:16
采纳率: 86.7%
浏览 314

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

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);
    }
    
    
    已采纳该答案
    打赏 评论
  • threenewbee 2019-11-26 10:32

    代码不完整,谁知道你怎么输入的,是不是读取完整了,调试下,读取输入后的二叉树建立对不对,再调试遍历的代码

    打赏 评论

相关推荐 更多相似问题