- 1、本文档共10页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
?遍历二叉树的应用1)建立一棵二叉树(在遍历过程生成结点,建立二叉树的存储结构,用链式存储结构)BiTreeCreatBiTree(){BiTreeT;scanf(ch);if(ch==??)T=NULL;else{T=(BiTNode?)malloc(sizeof((BiTNode));T-data=ch;/*生成根结点*/T-lchild=CreatBiTree();/*构造左子树*/T-rchild=CreatBiTree();/*构造右子树*/}return(T);}ADBCABDCABΦDΦΦCΦΦ按先序遍历先序遍历序列扩展先序遍历序列*2021/2/21ch=ATTAcreat(TL)ΛT=Λ,Creat(T)返回creat(TR)Tch=ΦDΛ||=返回creat(TR)D=Tch=ΦΛΛ返回ch=DTTDcreat(TL)=||ΦΦcreat(TR)ch=CTTCcreat(TL)–+ch=BTTBcreat(TL)ΦTch=ΦBΦΛTCΛch=Φ–+返回creat(TR)TCΛch=ΦΛ+返回ATABΦΛABΛD||=ABΛDΛΛABΛDΛΛC–+BΦAABΛDΛΛCΛΛ*2021/2/21(2)求二叉树的高度(深度)方法:对二叉树进行遍历,若树为空,则高度为0;若树非空,其高度应为左右子树高度的最大值加1。实现算法:intPostTreeDepth(BiTreeT){intn1,n2,max;if(T!=NULL){n1=PostTreeDepth(T-lchild);n2=PostTreeDepth(T-rchild);max=n1n2?n1:n2;return(max+1);}elsereturn(0);}*2021/2/21恢复二叉树在统一绘图软件或其它绘图软件中存在着这样的问题:如何存储一个用树表示的图形数据结构?在研制统一绘图软件系统时是用这样的办法来处理的:(1)对于用链表结构表示的图形数据结构,我们把每一个结点去掉指针项,只按结点的中序序列存储,并给出这棵树的前序(或后序)“序表”。(2)图形结构调入内存时,由中序的结点表及“序表”,形成的前序和中序数组(或后序和中序数组),恢复图形数据结构。二叉树的先序遍历是先访问根结点,然后再遍历根结点的左子树,最后遍历根结点的右子树。即在先序序列中,第一个结点必定是二叉树的根结点。*2021/2/21中序遍历则是先遍历左子树,然后访问根结点,最后再遍历右子树。这样,根结点在中序序列中必然将中序序列分割成两个子序列,前一个子序列是根结点的左子树的中序序列,而后一个子序列是根结点的右子树的中序序列。根据这两个子序列,先由先序序列确定第一个结点为根结点;知道根结点后,按中序序列可以划分左、右子树。在先序序列中,左子树序列的第一个结点是左子树的根结点,右子序列的第一个结点是右子树的根结点。这样,就确定了二叉树的三个结点。同时,左子树和右子树的根结点又可以分别把左子序列和右子序列划分成两个子序列,如此递归下去,当取尽先序序列中的结点时,便可以恢复一棵二叉树。*2021/2/211.由前序和中序恢复二叉树(1)根据前序序列确定树的根(第一个结点),根据中序序列确定左子树和右子树;(2)分别找出左子树和右子树的根结点,并把左、右子树的根结点联到父(father)结点上去;(3)再对左子树和右子树按此法找根结点和左、右子树,直到子树只剩下1个结点或2个结点或空为止。恢复二叉树*2021/2/21由下列前序序列和中序序列恢复二叉树。前序序列:ACBRSEDFMLK中序序列:RBSCEAFDLKM首先,由先序序列可知,结点A是二叉树的根结点;其次,根据中序序列,在A之前的所有结点都是根结点左子树的结点,在A之后的所有结点都是根结点右子树的结点:前序序列:
文档评论(0)