m0_61730560 2022-08-18 17:09 采纳率: 100%
浏览 57
已结题

线索二叉树,问题出在哪里


#include<stdio.h>
#include<stdlib.h>
typedef char TElemType;
typedef struct BiNode{
    struct BiNode *lchild,*rchild;
    int ltag,rtag;
    TElemType date;
}BiNode,*BiTree;
int InitBiTree(BiTree *t)
{
    (*t)=(BiNode*)malloc(sizeof(BiNode));
    if(!(*t)) return 0;
    (*t)->lchild=NULL;
    (*t)->rchild=NULL;
    (*t)->date='\0';
    (*t)->ltag=0;
    (*t)->rtag=0;
}
int CreatBiTree(BiTree *t)
{
    TElemType ch;
    scanf("%c",&ch);
    if(ch!='#'){
        (*t)=(BiNode*)malloc(sizeof(BiNode));
        (*t)->date=ch;
        (*t)->ltag=0;
        (*t)->rtag=0;
        CreatBiTree(&(*t)->lchild);
        CreatBiTree(&(*t)->rchild);
    }
    else (*t)=NULL;
}
int InOrderTraverse(BiTree *t,BiTree *pre)
{
    if((*t)){
        InOrderTraverse(&(*t)->lchild,&(*pre));
        if((*t)->lchild==NULL){
            (*t)->ltag=1;
            (*t)->lchild=*pre;
        }
        if((*pre)->rchild==NULL){
            (*pre)->rtag=1;
            (*pre)->rchild=*t;
        }
        pre=t;
        InOrderTraverse(&(*t)->rchild,&(*pre));
    }
    else return ;
} 
int Traverse(BiTree t)
{
    BiNode *p;
    p=t->lchild; 
    while(p!=NULL){
        printf("%c ",p->date);
        if(p->rtag==1) p=p->rchild;
        if(p->ltag==0) p=p->lchild;
    }
}
int main()
{
    BiTree T1,T=NULL,Pre=NULL;
    InitBiTree(&T1);
    Pre=T1;
    T1->lchild=T;
    CreatBiTree(&T);
    InOrderTraverse(&T,&Pre);
    Pre->rtag=1;
    Pre->rchild=T1;
    Traverse(T1);
    return 0;
} 
  • 写回答

3条回答 默认 最新

  • m0_61730560 2022-08-19 14:14
    关注
    
    #include<stdio.h>
    #include<stdlib.h>
    typedef char TElemType;
    typedef struct BiNode{
        struct BiNode *lchild,*rchild;
        int ltag,rtag;
        TElemType date;
    }BiNode,*BiTree;
    int InitBiTree(BiTree *t)
    {
        (*t)=(BiNode*)malloc(sizeof(BiNode));
        if(!(*t)) return 0;
        (*t)->lchild=NULL;
        (*t)->rchild=NULL;
        (*t)->date='\0';
        (*t)->ltag=0;
        (*t)->rtag=0;
    }
    int CreatBiTree(BiTree *t)
    {
        TElemType ch;
        scanf("%c",&ch);
        if(ch!='#'){
            (*t)=(BiNode*)malloc(sizeof(BiNode));
            (*t)->date=ch;
            (*t)->ltag=0;
            (*t)->rtag=0;
            CreatBiTree(&(*t)->lchild);
            CreatBiTree(&(*t)->rchild);
        }
        else (*t)=NULL;
    }
    int InOrderTraverse(BiTree *t,BiTree *pre)
    {
        if((*t)){
            InOrderTraverse(&(*t)->lchild,&(*pre));
            if((*t)->lchild==NULL){
                (*t)->ltag=1;
                (*t)->lchild=*pre;
            }
            if((*pre)->rchild==NULL){
                (*pre)->rtag=1;
                (*pre)->rchild=*t;
            }
            *pre=*t;
            InOrderTraverse(&(*t)->rchild,&(*pre));
        }
        else return ;
    } 
    int In(BiTree *t1,BiTree *t,BiTree *pre) 
    {
        (*t1)->ltag=1;
        if(!(*t)) (*t1)->lchild=(*t1);
        else{
            (*t1)->lchild=(*t);
            (*pre)->rtag=1;
            (*pre)->rchild=(*t1);
        } 
    }
    int Traverse(BiTree t)
    {
        BiNode *p;
        p=t->lchild; 
        while(p!=t){              //空树或遍历结束时,p==T
            while(p->ltag==0)      //沿左孩子向下
                p=p->lchild;     //访问其左子树为空的结点
            printf("%c ",p->date);
            while(p->rtag==1&&p->rchild!=t){
                p=p->rchild;    //沿右线索访问后继结点
                printf("%c ",p->date);
            }
            p=p->rchild;
        }
    }
    int main()
    {
        BiTree T1,T=NULL,Pre=NULL;
        InitBiTree(&T1);
        Pre=T1;
        CreatBiTree(&T);
        InOrderTraverse(&T,&Pre);//中序线索二叉树的建立 
        In(&T1,&T,&Pre);//将首元节点加入 
        Traverse(T1);
        return 0;
    } 
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 8月27日
  • 已采纳回答 8月19日
  • 修改了问题 8月18日
  • 创建了问题 8月18日

悬赏问题

  • ¥15 ansys fluent计算闪退
  • ¥15 有关wireshark抓包的问题
  • ¥15 需要写计算过程,不要写代码,求解答,数据都在图上
  • ¥15 向数据表用newid方式插入GUID问题
  • ¥15 multisim电路设计
  • ¥20 用keil,写代码解决两个问题,用库函数
  • ¥50 ID中开关量采样信号通道、以及程序流程的设计
  • ¥15 U-Mamba/nnunetv2固定随机数种子
  • ¥15 vba使用jmail发送邮件正文里面怎么加图片
  • ¥15 vb6.0如何向数据库中添加自动生成的字段数据。