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

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

文档评论(0)

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

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

1亿VIP精品文档

相关文档