(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;
#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
感觉差不多。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯