| 网站首页 | 业界新闻 | 群组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 108 人关注过本帖
标题:这个二叉树的后续遍历为什么不出循环?(先序构造)
只看楼主 加入收藏
梦寻
Rank: 1
等 级:新手上路
帖 子:21
专家分:6
注 册:2017-11-15
结帖率:100%
  问题点数:0  回复次数:1   
这个二叉树的后续遍历为什么不出循环?(先序构造)
#include<stdio.h>
#include<stdlib.h>
typedef struct Node
{
    char data;
    struct Node *LChild;
    struct Node *RChild;
}BiNode,*Bitree;
Bitree s2[10],s3[10];
char s1[10];
void CreateBitree(Bitree *bt)
{
    (*bt)=(Bitree)malloc(sizeof(BiNode));
    (*bt)->LChild=NULL; (*bt)->RChild=NULL;
    int top=1;
    Node *p;
    p=*bt;
    char ch;
    ch=getchar();
    s1[top]=ch;
    s2[top]=p;
    do
    {
        while((ch=getchar())!=' ')
        {
            if(ch=='\n') break;
            top++;
            if(p->LChild!=NULL)
            {
            p->RChild=(Bitree)malloc(sizeof(BiNode));
            p=p->RChild; p->LChild=NULL; p->RChild=NULL;
            }
            else{
            p->LChild=(Bitree)malloc(sizeof(BiNode));
            p=p->LChild; p->LChild=NULL; p->RChild=NULL;
               
            }
            s2[top]=p;
            s1[top]=ch;
        }
        if(top!=0)
        {
            p=s2[top];
            p->data=s1[top];
            top--;
        }
    }while(ch!='\n');
}
void PostOrder(Bitree root)
{
    Bitree p=root,m;
    int top=0;  s3[0]=NULL;
    do
    {
        while(p!=NULL)
        {
            top++;  
            s3[top]=p;
            p=p->LChild;
        }
        if(top!=0)
        {
            p=s3[top];
           while(p->RChild==NULL)
           {
                 printf("%c  ",p->data,top);
                 top--;
                 m=p;
                 p=s3[top];
            }   
            if(p->RChild!=NULL)
            {
                while(p->RChild==m&&top!=0)
                {
                     printf("%c  ",p->data,top);
                     top--;  
                     m=p;
                     p=s3[top];  
                }
                if(p!=NULL&&p->RChild!=m)
                {
                    p=p->RChild;
                }
            }
        }  
    }while(p!=NULL||top!=0);
     printf("出循环!");
}
int main()
{
    Bitree root;
    CreateBitree(&root);
    printf("\n后序遍历:");
    PostOrder( root);
 }
2018-12-28 21:14
梦寻
Rank: 1
等 级:新手上路
帖 子:21
专家分:6
注 册:2017-11-15
  得分:0 
已找到答案:当p=NULL时,运行会卡在p->RChile这里不动,所以出不了循环。
2018-12-29 00:04







关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.043749 second(s), 9 queries.
Copyright©2004-2019, BCCN.NET, All Rights Reserved