- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
由先序序列和中序序列建立二叉树
建树:betree(T,i,j,length)
{
如果串长度length不为0
{ 定位值k=中序序列起始值j;
判断(中序序列定位值k==先序序列起始值i),若!=, 则定位值+1向后继续寻找;
当找到时,给树T申请空间,将先序序列起始值赋给树结点的数据域T-data;
然后计算出左子树结点数pos=定位值k-中序序列起始值j;
建左子树:递归调用建树函数betree(将树的左孩子传过去,左子树初始值+1,中序序列的定位值,pos);
建右子树:递归调用建树函数betree(将树的右孩子传过去,左子树初始值+1再+定位值,串长-定位值-1)
//这样递归建树就完成了
}否则 树赋空值;
}
///////////////////////////////////////////////////////////////////////
//由先序序列和中序序列建立二叉树
//start1是先序序列的起始位置,start2是中序序列的起始位置,
//len是先序序列长度
void CreateBiTree(int start1,int start2,int len,BiTree T)
{
int pos,len1;
if (len=0) T=NULL;
else
{ pos=start2; //记录中序序列串的位置
while(b[pos]!=a[start1]) pos++; //只要在中序序列串b中没有找到根,那么就向继续向后寻找
T=(BiTree)malloc(sizeof(BiTNode));//在中序序列b中找到根,开辟根结点的空间
T-data=a[start1]; //根的值为先序序列的第一个元素
len1=pos-start2; //中序序列根左子区即左子树的长度
CreateBiTree(start1+1,start2,len1,T-lchild); //建立左子树
CreateBiTree(start1+len1+1,pos+1,len-len1-1,T-rchild); //建立右子树
}
}
例如
先序序列:Ebadcfhgikj
0
1
2
3
4
5
6
7
8
9
10
E
B
A
D
C
F
H
G
I
K
J
start1
start1+1
start1+pos+1
中序序列:Abcdefghijk
0
1
2
3
4
5
6
7
8
9
10
A
B
C
D
E
F
G
H
I
J
K
pos=start2
k=pos
K+1
#includestdio.h
#includestdlib.h
#includeconio.h
#includestring.h
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int Status;
#define TElemType char
char a[20],b[20]; // a存放先序序列,b存放中序序列
//- - - - -二叉树的二叉链表存储表示- - - - -
typedef struct BiTNode
{ TElemType data;
struct BiTNode *lchild, *rchild; //左右孩子指针
} BiTNode, *BiTree;
Status (* VisitFunc)(TElemType v); // 函数指针
Status Visit(TElemType v);//访问函数
Status CreatBiTree(BiTree T);//由先序序列创建二叉树
void CreateBiTree(int start1,int start2,int len,BiTree T);//由先序序列和中序序列建立二叉树
Status PreOrderTraverse(BiTree T, Status(*Visit)(TElemType e));//先序遍历二叉树
Status InOrderTraverse(BiTree T, Status(*Visit)(TElemType e));//中序遍历二叉树
Status PostOrderTraverse(BiTree T, Status(*Visit)(TElemType e));//后序遍历二叉树
//图6.8(b) p127
char Ve
您可能关注的文档
最近下载
- 苏教版六年级上册科学全册全套单元检测卷含期末(附答案).doc VIP
- 2024年贵州省遵义市播州区小升初数学模拟试卷附答案解析.docx VIP
- 12123交管学法减分试题库大全(有答案).pdf VIP
- 《C语言程序设计》(苏小红)课后习题答案高等教育出版社.pdf VIP
- 2026年福建省能源石化集团有限责任公司招聘备考题库及答案详解(夺冠系列).docx VIP
- 年产40万吨丙烯厂(MTP)甲醇合成工段初步设计.docx VIP
- 两级展开式圆柱齿轮减速器的设计.doc VIP
- 退学炒股:我和小明(珍藏版).docx VIP
- DB42_T1901-2022 生物质供热系统工程设计规范.docx VIP
- 2023-2024学年广东省中山市七年级(上)期末语文试卷.docx VIP
原创力文档


文档评论(0)