#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;
}
线索二叉树,问题出在哪里
- 写回答
- 好问题 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; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥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如何向数据库中添加自动生成的字段数据。