中易网

如何用扩展中序序列创建一个二叉树

答案:2  悬赏:10  
解决时间 2021-12-31 16:50
如何用扩展中序序列创建一个二叉树
最佳答案
前几天刚回答过一个,以下代码供参考
你要的按先序扩展序列建立二叉树的函数在CreateBiTree里:
#include "stdio.h"
#include "stdlib.h"
#define OK 1
#define ERROR 0
#define OVERFLOW -2

typedef char TElemType;
typedef int Status;
typedef struct BiTNode { // 结点结构
TElemType data;
struct BiTNode *lchild, *rchild;
// 左右孩子指针
} BiTNode, *BiTree;

//以下是建立二叉树存储结构
Status CreateBiTree(BiTree &T) {
char ch;
scanf("%c",&ch);
if(ch=='#') T=NULL;
else{
if(!(T=(BiTNode*)malloc(sizeof(BiTNode))))
exit(OVERFLOW);
T->data=ch;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
return OK;

} // CreateBiTree
void Preorder(BiTree T)
{
if(T)
{
printf("%c",T->data);
Preorder(T->lchild);
Preorder(T->rchild);
}
}

void Inorder(BiTree T)
{ // 中序遍历二叉树
if(T)
{
Inorder(T->lchild);
printf("%c",T->data);
Inorder(T->rchild);
}
}
void Postorder(BiTree T)
{ // 后序遍历二叉树
if(T)
{
Postorder(T->lchild);
Postorder(T->rchild);
printf("%c",T->data);
}
}

//以下是求叶子结点数
void CountLeaf(BiTree T,int& count){
if(T){
if((!T->lchild)&&(!T->rchild))
count++;
CountLeaf(T->lchild,count);
CountLeaf(T->rchild,count);
}
}

//以下是求二叉树的深度
int Depth(BiTree T ){
int depthval,depthLeft,depthRight;
if(!T) depthval=0;
else{
depthLeft = Depth(T->lchild);
depthRight = Depth(T->rchild);
if(depthLeft>depthRight)depthval = 1+depthLeft;
else depthval = 1+depthRight;
}
return depthval;
}

void main(){
BiTree T;
int s=0,d;
printf("\n creat of the bitree:\n");
CreateBiTree(T);
printf("\n output result of Preorder:\n");
Preorder(T);
CountLeaf(T,s);
d=Depth(T);
printf("\n leaves=%d\n",s);
printf("\n depth=%d\n",d);
}
全部回答
#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("先序创建二叉树:\n");       t=createtree();        thre=inorderthrtree(t);        printf("\n中序线索化二叉树并中序遍历:\n");       inthrtravel(thre);    }
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
情杀的意思是什么?情杀的释义是什么啊?
宿州市砀山县曹庄派出所办公地址在什么地方,
排撆的意思是什么啊?请解释下!
建设,监理,施工单位三方签字盖章确认的暂定
宿州市砀山县李庄派出所地址在什么地方,想过
求暗黑破坏神3腐烂的尸体位置 做成就的那个
貞輝的意思是什么?貞輝的释义是什么啊?
宿州市砀山县程庄派出所办公地址在什么地方,
叙永县医院作风问题:叙永县分水镇中心卫生院
续长的意思是什么啊?请解释下!
通见的意思是什么?通见的释义是什么啊?
宿州市砀山县朱楼派出所地址在哪,我要去那里
宿州市砀山县刘暗楼派出所地址在什么地方,想
砂子属于什么材料大类
excel提取A列后两位到B列
推荐资讯
想去寺院静下心,忏悔,学佛,大约一个星期左
吴姓章字辈取名
贫下中农的意思是什么啊?请解释下!
谰词的意思是什么?谰词的释义是什么啊?
伟望的意思是什么?伟望的释义是什么啊?
尚家窑村委会办公地址在什么地方,我要处理点
會館的意思是什么?會館的释义是什么啊?
JavaEE和PHP哪个更合适用于做网站
悦翔v3全部保费3300么,车损 三者是100万司机
关于没有离婚而在外面又有孩子了是怎么判刑
少数民族的人都很丑么
都倉的意思是什么?都倉的释义是什么啊?
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?