永发信息网

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

答案:2  悬赏:20  手机版
解决时间 2021-01-19 23:25
  • 提问者网友:战魂
  • 2021-01-19 17:06
(1)设定一个序列,用递归的方法先序构造二叉树 (2)建立中序线索二叉树,并中序遍历该
最佳答案
  • 五星知识达人网友:酒醒三更
  • 2021-01-19 18:33
#include  
 
#include  
 
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;           
 
            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=(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("先序创建二叉树:
"); 
    T=CreateTree(); 
 
    Thre=InOrderThrTree(T); 
 

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


 
}

全部回答
  • 1楼网友:归鹤鸣
  • 2021-01-19 18:55
感觉差不多。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯