(1)设定一个序列,用递归的方法先序构造二叉树 (2)建立中序线索二叉树,并中序遍历该 20

数据结构的问题,用C语言实现,可以直接运行,最好能把程序运行结果图放上来~~... 数据结构的问题,用C语言实现,可以直接运行,最好能把程序运行结果图放上来~~ 展开
 我来答
诗的哲学fly
推荐于2018-05-01
知道答主
回答量:11
采纳率:100%
帮助的人:4.2万
展开全部

#include <stdio.h> 

 

#include <malloc.h> 

 

typedef enum{Link,Thread} PointerTag;  /*指针标志*/ 

 

typedef char DataType; 

 

typedef struct BiThreTree{               /*定义结点元素*/ 

 

        PointerTag LTag,RTag; 

 

        DataType data; 

 

        struct BiThreTree *lchild,*rchild; 

 

        }BiThreTree; 

 

BiThreTree *pre;                   /*全局变量,用于二叉树的线索化*/ 

 

BiThreTree *CreateTree()            /*按前序输入建立二叉树*/ 

 

 

        BiThreTree *T; 

 

        DataType ch; 

 

        scanf("%c",&ch); 

 

        if(ch=='#') 

 

           T=NULL; 

 

        else 

 

           {T=(BiThreTree *)malloc(sizeof(BiThreTree)); 

 

            T->data=ch; 

 

            T->LTag=Link;          /*初始化时指针标志均为Link*/ 

 

            T->RTag=Link; 

 

            T->lchild=CreateTree(); 

 

            T->rchild=CreateTree(); 

 

           } 

 

        return T; 

 

 

void InThread(BiThreTree *T) 

 

 

     BiThreTree *p; 

 

     p=T; 

 

     if(p) 

 

    { 

 

     InThread(p->lchild); 

 

     if(!p->lchild) 

 

        { p->LTag=Thread; 

 

          p->lchild=pre; 

 

        } 

 

     if(!pre->rchild) 

 

        { pre->RTag=Thread; 

 

          pre->rchild=p; 

 

        } 

 

     pre=p; 

 

     InThread(p->rchild); 

 

    } 

 

 

BiThreTree *InOrderThrTree(BiThreTree *T) /*中序线索化二叉树*/ 

 

 

     BiThreTree *Thre;                 /*Thre为头结点的指针*/ 

 

     Thre=(BiThreTree *)malloc(sizeof(BiThreTree)); 

 

     Thre->lchild=T; 

 

     Thre->rchild=Thre; 

 

     pre=Thre; 

 

     InThread(T); 

 

     pre->RTag=Thread; 

 

     pre->rchild=Thre; 

 

     Thre->rchild=pre; 

 

     return Thre; 

 

 

void InThrTravel(BiThreTree *Thre)    /*中序遍历二叉树*/ 

 

 

     BiThreTree *p; 

 

     p=Thre->lchild; 

 

     while(p!=Thre)                  /*指针回指向头结点时结束*/ 

 

     { 

 

       while(p->LTag==Link) 

 

          p=p->lchild; 

 

       printf("%4c",p->data); 

 

       while(p->RTag==Thread&&p->rchild!=Thre) 

 

         {p=p->rchild; 

 

          printf("%4c",p->data); 

 

         } 

 

       p=p->rchild; 

 

     } 

 

 

void  main() 

 

 

    BiThreTree *T,*Thre; 

 

    printf("先序创建二叉树:\n");

 

    T=CreateTree(); 

 

    Thre=InOrderThrTree(T); 

 

    printf("\n中序线索化二叉树并中序遍历:\n");

 

    InThrTravel(Thre); 

 


 

}

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
fefen0
2012-11-30
知道答主
回答量:30
采纳率:0%
帮助的人:15万
展开全部
感觉差不多。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式