叉树代码(严蔚敏习题册).docVIP

叉树代码(严蔚敏习题册).doc

此“教育”领域文档为创作者个人分享资料,不作为权威性指导和指引,仅供参考
  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、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++; //只要在中序序列串中没有找到根,那么就向继续向后寻找 T=(BiTree)malloc(sizeof(BiTNode));//在中序序列中找到根,开辟根结点的空间 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 =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存放先序序列序序列//- - - - -二叉树的二叉链表存储表示- - - - - 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));//后序遍历二叉树 //图

文档评论(0)

panguoxiang + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档